mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-22 11:19:17 +01:00
* Changed WBFS stuff to C++ classes
* Fixed bug in http.c (where realloc *might* choose another address, thanks Dr. Clipper) * Added support to /wbfs/Game Title [GAMEID].wbfs files (thanks oggzee) * Fixed bug in cfg_cleanup when switching partitions * Added BGM class again (for playing background music, requested by dimok) * Added settings for background music again * Fixed bug in MEM2 class (returning an invalid handle when no memory could be allocated, thanks to dimok) * Updated DIP module to OpenDIP (report bugs with this one if you've found them, but report them here: http://github.com/spacemanspiff/odip-plugin) * Added initial code for cios 222 rev5 (THIS DOES NOT WORK YET! DON'T FILE BUGS ON THIS ONE!) * Added fatffs module by Hermes and Waninkoko (THIS DOES NOT WORK YET! DON'T FILE BUGS ON THIS ONE!) * Fixed bug in Settings, which resulted in a crash when the partition was changed. * Added caching for gamelist entries, so switching between different screens/sort options/display modes should be faster * Changed defines in ehc_module, in order to prevent clashes with new defines in rev5
This commit is contained in:
parent
1a3eb7be08
commit
e8f5ab07bd
@ -2,8 +2,8 @@
|
||||
<app version="1">
|
||||
<name> USB Loader GX</name>
|
||||
<coder>USB Loader GX Team</coder>
|
||||
<version>1.0 r910</version>
|
||||
<release_date>201002091456</release_date>
|
||||
<version>1.0 r911</version>
|
||||
<release_date>201002141632</release_date>
|
||||
<short_description>Loads games from USB-devices</short_description>
|
||||
<long_description>USB Loader GX is a libwiigui based USB iso loader with a wii-like GUI. You can install games to your HDDs and boot them with shorter loading times.
|
||||
The interactive GUI is completely controllable with WiiMote, Classic Controller or GC Controller.
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: David Jelinek (djelinek@hotmail.com) \n"
|
||||
"Language-Team: r823 - last version on http://djelinek.sweb.cz/_USBLoderGX/czech.lang \n"
|
||||
@ -188,9 +188,6 @@ msgstr "Zpet do Wii nabídky"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Hudba na pozadí"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Cesta pro hudbu na pozadí zmenena"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Velké díky pro:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Nelze smazat:"
|
||||
msgid "Cancel"
|
||||
msgstr "Zrušit"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kanály"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Zamcení konzole"
|
||||
msgid "Locked"
|
||||
msgstr "Zamceno"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Zvuková smyčka"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Nejspíše má velikost, která není delitelná 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Pripojit DVD mechaniku"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Hlasitost hudby"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Vyberte ze seznamu"
|
||||
msgid "Play Count"
|
||||
msgstr "Spušteno"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Cekejte prosím..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Publikoval "
|
||||
msgid "Quick Boot"
|
||||
msgstr "Rychlé zavedení"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Nacítám WAD data... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Prejmenovat hru na WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Vynulovat cítac spuštení"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Restartuji..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Zárí"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Nastavit vyhledávací filtr"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Nastavit jako hudbu na pozadí?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Nastavení"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "z "
|
||||
msgid "seconds left"
|
||||
msgstr "sekund zbývá"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Cesta pro hudbu na pozadí zmenena"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Nastavit jako hudbu na pozadí?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Soubor není typu WAD"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: dorf[dk]\n"
|
||||
"Language-Team: dorf[dk]\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Tilbage til HBC"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Baggrundsmusik"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Sti til baggrundsmusik ændret"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "En stor tak til:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Kan ikke slettes:"
|
||||
msgid "Cancel"
|
||||
msgstr "Annullér"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kanaler"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Lås konsol"
|
||||
msgid "Locked"
|
||||
msgstr "Låst"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Afspil lyd i løkke"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Sandsynligvis har det dimensioner, der ikke er delelige med fire."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Mount DVD-drev"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Lydstyrke"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Vælg fra en liste"
|
||||
msgid "Play Count"
|
||||
msgstr "Spiltæller"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Vent venligst..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Udgivet af"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Hurtig opstart"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Læser WAD-data... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Omdøb spil på WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Nulstil spiltæller"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Genstarter..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr ""
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Søgefilter"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Indstil som baggrundsmusik?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Indstillinger"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "af"
|
||||
msgid "seconds left"
|
||||
msgstr "sekunder tilbage"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Sti til baggrundsmusik ændret"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Indstil som baggrundsmusik?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Filen er ikke en .WAD"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:22+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: glowy\n"
|
||||
"Language-Team: tj_cool, glowy\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Terug naar Wii Menu"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Achtergrondmuziek"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Locatie achtergrondmuziek gewijzigd."
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Grote dank aan:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Kan niet verwijderen:"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuleren"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "Verander afspeel locatie"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kanalen"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Console vergrendelen"
|
||||
msgid "Locked"
|
||||
msgstr "Vergrendeld"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Geluid herhalen"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Waarschijnlijk zijn de afmetingen niet deelbaar door 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "DVD Laden"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "Muziek Herhaal Mode"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Muziekvolume"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Kiezen van lijst"
|
||||
msgid "Play Count"
|
||||
msgstr "Gespeeld"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "Speel Volgende"
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "Speel Vorige"
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "Speelt nu:"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Even geduld..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Uitgegeven door"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Snelle start"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "WAD data lezen... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr "Verwijder update"
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Spel hernoemen op WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Reset achtergrond muziek"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Speeltellers resetten"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "Reset naar standaard achtergrond muziek?"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Herstarten..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Sep"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Zoekfilter instellen"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Instellen als achtergrondmuziek?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Instellingen"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "van"
|
||||
msgid "seconds left"
|
||||
msgstr "seconden over"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Locatie achtergrondmuziek gewijzigd."
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Instellen als achtergrondmuziek?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Dit is geen .wad bestand"
|
||||
|
||||
@ -1357,30 +1390,9 @@ msgstr "seconden over"
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "Je gebruikt het NTFS bestandssysteem. Door mogelijke schrijffouten naar een NTFS partitie, is een spel installeren niet mogelijk."
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "Verander afspeel locatie"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "Muziek Herhaal Mode"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "Partitie Formatteer Menu"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "Speel Volgende"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "Speel Vorige"
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "Speelt nu:"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "Reset achtergrond muziek"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "Reset naar standaard achtergrond muziek?"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "Geef app eerst vrij."
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@ -188,9 +188,6 @@ msgstr ""
|
||||
msgid "Backgroundmusic"
|
||||
msgstr ""
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr ""
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr ""
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr ""
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr ""
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr ""
|
||||
msgid "Locked"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr ""
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr ""
|
||||
msgid "Mount DVD drive"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr ""
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr ""
|
||||
msgid "Play Count"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr ""
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr ""
|
||||
msgid "Quick Boot"
|
||||
msgstr ""
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr ""
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr ""
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr ""
|
||||
msgid "Set Search-Filter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: c64rmx\n"
|
||||
"Language-Team: \n"
|
||||
@ -188,9 +188,6 @@ msgstr "Takaisin Wii Menuun"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Taustamusiikki"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Taustamusiikin polku muutettu"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Isot kiitokset:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Ei voida poistaa:"
|
||||
msgid "Cancel"
|
||||
msgstr "Peruuta"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr ""
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Lukitse konsoli"
|
||||
msgid "Locked"
|
||||
msgstr "Lukittu"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr ""
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Todennäköisesti sisältää ulottuvuuksia jotka eivät ole jaollisia n
|
||||
msgid "Mount DVD drive"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Voimakkuus"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Valitse listasta"
|
||||
msgid "Play Count"
|
||||
msgstr "Pelauksen määrä"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr ""
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Julkaisu:"
|
||||
msgid "Quick Boot"
|
||||
msgstr ""
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Luetaan WAD:ia... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Uudelleennimeä peli"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Resetoi pelauksen määrä"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Boottaa..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "syys"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Aseta taustamusiikiksi?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Asetukset"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "josta"
|
||||
msgid "seconds left"
|
||||
msgstr "sekuntia jäljellä"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Taustamusiikin polku muutettu"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Aseta taustamusiikiksi?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Tiedosto ei ole .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: Kin8\n"
|
||||
"Language-Team: Badablek, Amour, ikya & Kin8\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Retour Menu Wii"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Fond sonore"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Dossier fond sonore modifié."
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Grand merci à:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Impossible de supprimer:"
|
||||
msgid "Cancel"
|
||||
msgstr "Annuler"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "Changer Dossier"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Chaînes"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Verrouiller la console"
|
||||
msgid "Locked"
|
||||
msgstr "Clic pour déverrouiller"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr "Répéter Dossier"
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr "Répéter Musique"
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Son en boucle"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Il est fort probable que les dimensions ne soient pas des multiples de 4
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Lancer DVD"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "Mode Boucle Musique"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Volume Musique"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Sélectionner"
|
||||
msgid "Play Count"
|
||||
msgstr "Utilisation"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "Jouer Suiv."
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr "Jouer 1 fois"
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "Jouer Précéd."
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "Musique Actuelle:"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Veuillez patienter..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Publié par"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Démarrage rapide"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr "Aléatoire"
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Lecture données WAD... OK!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr "Supprimer Mise à Jour"
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Renommer un jeu"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Reset"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Reset Utilisation du Jeu"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "Restaurer fond sonore standard ?"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Redémarrage..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr ""
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Filtre de Recherche"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Utiliser comme fond sonore ?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Paramètres"
|
||||
|
||||
@ -1348,48 +1375,21 @@ msgstr "sur"
|
||||
msgid "seconds left"
|
||||
msgstr "secondes restantes"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Dossier fond sonore modifié."
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Utiliser comme fond sonore ?"
|
||||
|
||||
#~ msgid "Install not possible"
|
||||
#~ msgstr "Installation impossible"
|
||||
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "Le système de fichier NTFS est utilisé. En raison à de possibles erreurs d'écriture sur une partition de NTFS, l'installation d'un jeu est impossible."
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "Changer Dossier"
|
||||
|
||||
#~ msgid "Loop Directory"
|
||||
#~ msgstr "Répéter Dossier"
|
||||
|
||||
#~ msgid "Loop Music"
|
||||
#~ msgstr "Répéter Musique"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "Mode Boucle Musique"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "Menu Formatage Partition"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "Jouer Suiv."
|
||||
|
||||
#~ msgid "Play Once"
|
||||
#~ msgstr "Jouer 1 fois"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "Jouer Précéd."
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "Musique Actuelle:"
|
||||
|
||||
#~ msgid "Random Directory Music"
|
||||
#~ msgstr "Aléatoire"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "Reset"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "Restaurer fond sonore standard ?"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "Déverrouillage nécessaire."
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-09 16:02+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: ZEN.13\n"
|
||||
"Language-Team: Snoozer, wishmasterf, Bertilax, ZEN.13\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Wii Menü"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Hintergrundmusik"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Pfad geändert"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Großen Dank an:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Löschen fehlgeschlagen:"
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "Pfad ändern"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kanäle"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Konsole sperren"
|
||||
msgid "Locked"
|
||||
msgstr "gesperrt"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Schleife"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Höchstwahrscheinlich sind Breite und Höhe keine Vielfachen von 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Spiel starten"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "Wiederholungsmodus"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Musik Lautstärke"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Wähle aus Liste"
|
||||
msgid "Play Count"
|
||||
msgstr "Spielzähler"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "Nächster Titel"
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "Vorheriger Titel"
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "Aktuelle Musik:"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Bitte warten..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Veröffentlicht von"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Schnelles Laden"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Lese WAD Daten... OK!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr "Update entfernen"
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Spiel umbenennen"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Musik zurücksetzen"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Spielzähler zurücksetzen"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "Auf Standard-Hintergrundmusik zurücksetzen?"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Damit die neue Version benutzt werden kann, muss der Loader neu gestartet werden."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "September"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Suche"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Als Hintergrundmusik verwenden?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "von"
|
||||
msgid "seconds left"
|
||||
msgstr "Sekunden verbleiben"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Pfad geändert"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Als Hintergrundmusik verwenden?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Die Datei ist keine .wad"
|
||||
|
||||
@ -1357,30 +1390,9 @@ msgstr "Sekunden verbleiben"
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "Du benutzt das NTFS Dateisystem. Wegen möglicher Schreibfehler auf einer NTFS Partition, ist das Installieren eines Spiels nicht möglich."
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "Pfad ändern"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "Wiederholungsmodus"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "Partitionen Formatierungs-Menü"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "Nächster Titel"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "Vorheriger Titel"
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "Aktuelle Musik:"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "Musik zurücksetzen"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "Auf Standard-Hintergrundmusik zurücksetzen?"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "Entsperre zuerst den Loader."
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-12-29 11:05+0100\n"
|
||||
"Last-Translator: Springdale\n"
|
||||
"Language-Team: Tusk, Springdale\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Visszatérés a Wii Menübe"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Háttérzene"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Háttérzene útvonala megváltozott."
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Köszönet:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Nem törölhetõ"
|
||||
msgid "Cancel"
|
||||
msgstr "Mégse"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Csatornák"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Konzol Lezárása"
|
||||
msgid "Locked"
|
||||
msgstr "Lezárva"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Folyamatos hang"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Vélhetõen méretei nem oszhatók 4-gyel."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "DVD meghajtó felcsatolása"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Zene Hangerõ"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Válassz a listából"
|
||||
msgid "Play Count"
|
||||
msgstr "Indítások"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Kérlek várj..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Kiadta"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Gyors Boot"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "WAD adat olvasás... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "WBFS játék átnevezése"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Elindítások nullázása"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Újraindítás..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Szep"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Keresés"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Beállítod háttérzenének?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Beállítások"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "./"
|
||||
msgid "seconds left"
|
||||
msgstr "hátralévõ másodperc"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Háttérzene útvonala megváltozott."
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Beállítod háttérzenének?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "A fájl nem .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: Cambo \n"
|
||||
"Language-Team: FoxeJoe, Cambo\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Torna al Menu Wii"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Musica Sottofondo"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Percorso Musica modificato"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Grazie mille a:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Impossibile eliminare:"
|
||||
msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Canali"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Blocco Console"
|
||||
msgid "Locked"
|
||||
msgstr "Bloccato"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Suono Ripetuto"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Molto probabilmente le dimensioni non sono divisibili per 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Avvia DVD"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Volume"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Seleziona da un elenco"
|
||||
msgid "Play Count"
|
||||
msgstr "Giocati"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Attendere prego..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Pubblicato da"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Avvio Veloce"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Sto leggendo i dati del WAD... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr "Rimuovi aggiornamento"
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Rinomina Gioco su WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Azzera contatore"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Premere OK per riavviare..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "settembre"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Cerca Gioco"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Imposto come Musica Sottofondo?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "di"
|
||||
msgid "seconds left"
|
||||
msgstr "secondi mancanti"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Percorso Musica modificato"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Imposto come Musica Sottofondo?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Non è un file .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: hosigumayuugi\n"
|
||||
"Language-Team: hosigumayuugi\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Wiiメニューへ"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "BGM"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "BGMのパスを変更しました"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "協力:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "削除できません"
|
||||
msgid "Cancel"
|
||||
msgstr "キャンセル"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "プレイパスを変更"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "チャンネル"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "GXをロック"
|
||||
msgid "Locked"
|
||||
msgstr "ロックされています"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr "フォルダ内でループ"
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr "ループさせる"
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "ループさせる"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "4で割り切れない寸法があります"
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "DVDを起動"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "ループ機能"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "BGMの音量"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "リストから選択"
|
||||
msgid "Play Count"
|
||||
msgstr "プレイ回数"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "次へ"
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr "一度だけ再生"
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "前へ"
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "再生中"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "しばらくお待ちください"
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "発売元:"
|
||||
msgid "Quick Boot"
|
||||
msgstr "ワンボタン起動"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "WADデータの読み込み...成功!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "WBFS内のゲーム名を変更"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "BGMをリセット"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "プレイ回数をリセット"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "BGMを初期状態に戻しますか?"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "再起動します"
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "9月"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "検索"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "BGMに設定しますか?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "中"
|
||||
msgid "seconds left"
|
||||
msgstr "秒で完了"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "BGMのパスを変更しました"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "BGMに設定しますか?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "WADファイルではありません"
|
||||
|
||||
@ -1357,39 +1390,9 @@ msgstr "秒で完了"
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "NTFS領域にインストール中にエラーが発生するとインストールに失敗します"
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "プレイパスを変更"
|
||||
|
||||
#~ msgid "Loop Directory"
|
||||
#~ msgstr "フォルダ内でループ"
|
||||
|
||||
#~ msgid "Loop Music"
|
||||
#~ msgstr "ループさせる"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "ループ機能"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "初期化メニュー"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "次へ"
|
||||
|
||||
#~ msgid "Play Once"
|
||||
#~ msgstr "一度だけ再生"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "前へ"
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "再生中"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "BGMをリセット"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "BGMを初期状態に戻しますか?"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "先にロックを解除してください"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: nextos@korea.com\n"
|
||||
"Language-Team: \n"
|
||||
@ -188,9 +188,6 @@ msgstr "Wii 메뉴로 놀아가기"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "배경음악"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "배경음악 경로 변경됨."
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "감사 :"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "삭제할 수 없습니다:"
|
||||
msgid "Cancel"
|
||||
msgstr "취소"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr ""
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "콘솔 잠금"
|
||||
msgid "Locked"
|
||||
msgstr "잠김"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr ""
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "대부분 이미지는 4로 나누어져야 되요."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "음량"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "리스트로 부터 고르기"
|
||||
msgid "Play Count"
|
||||
msgstr "실행 횟수"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr ""
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "출판자"
|
||||
msgid "Quick Boot"
|
||||
msgstr "게임 바로실행"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "WAD 데이터 읽기... 성공!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "WBFS에서 게임 이름 변경"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "실행횟수 리셋"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "재시작..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "9월"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "벼경음악 설정?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "설정"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "중"
|
||||
msgid "seconds left"
|
||||
msgstr "초 남았습니다"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "배경음악 경로 변경됨."
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "벼경음악 설정?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "화일이 .wad 아님"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: raschi\n"
|
||||
"Language-Team: raschi\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Wii meny"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Bakgrunnsmusikk"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Bakgrunnsmusikk sti endret"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Stor takk til:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Kan ikke slette:"
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kanaler"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Lås konsoll"
|
||||
msgid "Locked"
|
||||
msgstr "Låst"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr ""
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Sannsynligvis har bildet dimensjoner som ikke kan deles med 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Last DVD stasjon"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Musikk volum"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Velg fra liste"
|
||||
msgid "Play Count"
|
||||
msgstr "Ganger spilt"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Vennligst vent..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Publisert av"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Hurtig start"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Leser WAD data... OK!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Gi nytt navn til spill på WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Nullstill teller"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Starter på nytt..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Sep"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Angi søkefilter"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Bruk som bakgrunnsmusikk?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Innstillinger"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "av"
|
||||
msgid "seconds left"
|
||||
msgstr "sekunder gjenstår"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Bakgrunnsmusikk sti endret"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Bruk som bakgrunnsmusikk?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Denne filen er ikke en .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: ziom666 (zadania_prog@vp.pl)\n"
|
||||
"Language-Team: \n"
|
||||
@ -188,9 +188,6 @@ msgstr "Powrit do Wii Menu"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Muzyka w tle"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Sciezka do muzyki w tle zmieniona"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Podziekowania dla"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Nie mozna usunac"
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kanaly"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Zablokuj konsole"
|
||||
msgid "Locked"
|
||||
msgstr "Zablokowano"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Zapetl dzwieki"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Prawdopodobnie rozdzielczosc nie jest podzielna przez 4"
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Uruchom naped DVD"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Poziom glosnosci"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Wybierz z listy"
|
||||
msgid "Play Count"
|
||||
msgstr "Licznik"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Prosze czekac..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr ""
|
||||
msgid "Quick Boot"
|
||||
msgstr "Szybkie ladowanie"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Odczyt danych WAD...Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Zmien tytul gry na WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Zrestartuj licznik"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Restartowanie..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Wrzesien"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Ustaw filtr wyszukiwania"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Ustawic jako muzyke w tle?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ustawienia"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "z"
|
||||
msgid "seconds left"
|
||||
msgstr "sekund pozostalo"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Sciezka do muzyki w tle zmieniona"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Ustawic jako muzyke w tle?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "To nie plik .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-23 18:52+0200\n"
|
||||
"Last-Translator: boto12\n"
|
||||
"Language-Team: boto12\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Menu do Wii"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Música de fundo"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Pasta Música Fundo modificada"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Agradecimentos:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Não foi possível apagar:"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Canais"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Bloquear Configurações"
|
||||
msgid "Locked"
|
||||
msgstr "Bloqueado"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr ""
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Provável que o tamanho não seja divisível por 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Carregar leitor DVD"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Volume da Música"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Escolher da lista"
|
||||
msgid "Play Count"
|
||||
msgstr "Vezes jogadas"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Por favor aguarde..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Publicado por"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Inicialização Rápida"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Lendo dados do WAD... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Alterar nome do jogo na partição WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Limpar Contagem"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "O Wii irá reiniciar"
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Set"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Usar filtro de busca"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Definir como música de fundo?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "de"
|
||||
msgid "seconds left"
|
||||
msgstr "segundos restantes"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Pasta Música Fundo modificada"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Definir como música de fundo?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "O arquivo não é um .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2010-02-01 18:10-0000\n"
|
||||
"Last-Translator: Sky8000\n"
|
||||
"Language-Team: Sky8000 <sky8000@hotmail.com>\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Menu da Wii"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Música de fundo"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Pasta Música Fundo alterada"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Agradecimentos:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Não foi possível apagar:"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "Alterar Pasta de Músicas"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Canais"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Bloquear Configurações"
|
||||
msgid "Locked"
|
||||
msgstr "Bloqueado"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Repetir Sons"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "O mais provável é que o tamanho não seja divisível por 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Montar Unidade de DVD"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "Modo de Repetição"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Volume Música"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Escolher da lista"
|
||||
msgid "Play Count"
|
||||
msgstr "Vezes jogadas"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "Próxima"
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "Anterior"
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "Reproduzindo:"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Por favor aguarde..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Publicado por"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Arranque Rápido"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Lendo dados do WAD... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr "Remover actualização"
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Alterar nome do jogo (WBFS)"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Repor Música de Fundo"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Limpar Contagem"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "Repor Musica de Fundo predefinida?"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "A Wii irá reiniciar"
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Set"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Filtro de pesquisa"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Definir como música de fundo?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configurações"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "de"
|
||||
msgid "seconds left"
|
||||
msgstr "segundos restantes"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Pasta Música Fundo alterada"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Definir como música de fundo?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "O ficheiro não é um .wad"
|
||||
|
||||
@ -1357,30 +1390,9 @@ msgstr "segundos restantes"
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "Está a utilizar um sistema de ficheiros NTFS. Devido à possibilidade de ocorrerem erros na gravação não será possível instalar jogos."
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "Alterar Pasta de Músicas"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "Modo de Repetição"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "Menu de Formatação de Partição"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "Próxima"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "Anterior"
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "Reproduzindo:"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "Repor Música de Fundo"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "Repor Musica de Fundo predefinida?"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "Desbloquear aplicação primeiro."
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: nikolai_ca\n"
|
||||
"Language-Team: Kir, alendit, nikolai_ca\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Вернуться в меню Wii"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Фоновая музыка"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Путь к фоновой музыке изменен."
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Большое спасибо:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Невозможно удалить:"
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Каналы"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Заблокировать консоль"
|
||||
msgid "Locked"
|
||||
msgstr "Заблокировано"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Зациклить звут"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Размеры картинки не делятся на 4. Поздра
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Монтировать DVD"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Громкость"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Выберите из списка"
|
||||
msgid "Play Count"
|
||||
msgstr "Запущено раз"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Пожалуйста подождите..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Опубликовано: "
|
||||
msgid "Quick Boot"
|
||||
msgstr "Быстрая загрузка"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Чтение данных WAD... ОК!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Переименовать игры в WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Сбросить счетчик запусков"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Перезапускаю..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Сен"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Установить фильтр для поиска"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "установить как фоновую музыку"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Установки"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "из"
|
||||
msgid "seconds left"
|
||||
msgstr "секунд осталось"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Путь к фоновой музыке изменен."
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "установить как фоновую музыку"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Это не файл .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: knife.hu kavid\n"
|
||||
"Language-Team: kavid\n"
|
||||
@ -188,9 +188,6 @@ msgstr "返回 Wii 系统菜单"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "背景音乐"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "背景音乐路径已变更"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "非常感谢:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "无法删除:"
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "频道"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "锁定控制台"
|
||||
msgid "Locked"
|
||||
msgstr "已锁定"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr ""
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "图片格式错误,可能它的尺寸不是 4 的倍数."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "挂载DVD光驱"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "音量"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "从列表中选取"
|
||||
msgid "Play Count"
|
||||
msgstr "游戏计数"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "请等待..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "发行"
|
||||
msgid "Quick Boot"
|
||||
msgstr "快速启动"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "读取 WAD 数据... 完成!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "改变 WBFS (硬盘)上的游戏名称"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "重置游戏计数"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "重启中..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "九月"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "设置搜索过滤器"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "设置成背景音乐?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "的"
|
||||
msgid "seconds left"
|
||||
msgstr "剩余秒数"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "背景音乐路径已变更"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "设置成背景音乐?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "这不是一个 WAD 文件"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: SirPalax\n"
|
||||
"Language-Team: Penn, SirPalax\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Volver a Menú Wii"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Música de fondo"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Ruta de Música de fondo cambiada"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Gracias a:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "No se eliminó:"
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "Cambiar Ruta"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Canales"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Bloquear consola"
|
||||
msgid "Locked"
|
||||
msgstr "Bloqueada"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Bucle de sonido"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Probablemente, las dimensiones no sean múltiplo de 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Montar unidad DVD"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "Modo Bucle Musical"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Volumen de la Música"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Elegir de una lista"
|
||||
msgid "Play Count"
|
||||
msgstr "Partidas"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "Oír Siguiente"
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "Oír Anterior"
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "Reproducción Musical:"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Por favor, espera..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Publicado por"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Inicio Rápido"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Leyendo datos del WAD... ¡Correcto!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr "Quitar actualización"
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Renombrar juego en WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "Reiniciar Música de Fondo"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Reiniciar Partidas"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "¿Poner la Música por defecto?"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Reiniciando..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr ""
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Usar filtro de búsqueda"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "¿Poner como música de fondo?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Configuración"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "de"
|
||||
msgid "seconds left"
|
||||
msgstr "segundos restantes"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Ruta de Música de fondo cambiada"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "¿Poner como música de fondo?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "El archivo no es un .wad"
|
||||
|
||||
@ -1357,30 +1390,9 @@ msgstr "segundos restantes"
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "Estás utilizando un sistema de archivos NTFS. Debido a posibles errores de escritura en la partición NTFS, la instalación del juego es imposible."
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "Cambiar Ruta"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "Modo Bucle Musical"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "Menú Formatear Partición"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "Oír Siguiente"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "Oír Anterior"
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "Reproducción Musical:"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "Reiniciar Música de Fondo"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "¿Poner la Música por defecto?"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "Desbloquea primero la aplicación."
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2010-01-19 17:39+0200\n"
|
||||
"Last-Translator: Katsurou\n"
|
||||
"Language-Team: Katsurou, pirateX\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Tillbaka till Wii-menyn"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Bakgrundsmusik"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Sökväg till bakgrundsmusik ändrad."
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Stort tack till:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Kunde inte radera:"
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "Ändra spel sökväg"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kannaler"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Lås konsol"
|
||||
msgid "Locked"
|
||||
msgstr "Låst"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Loopa ljudet"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Troligtvis har den mått som inte är jämnt dividerade med 4."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "Montera DVD läsare"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "Musik Återuppspelningsläge"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Volym"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Välj från en lista"
|
||||
msgid "Play Count"
|
||||
msgstr "Spelat"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "Spela nästa"
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "Spela förgående"
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "Spela musik:"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Vänligen vänta..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Publicerat av"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Snabbstart"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Läser WAD data... Ok!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "Döp om spel på WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "återställ BG musik"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Återställ spelat-räknaren"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "Återställ till standard BGM?"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Startar om..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr ""
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Ställ in sök-filter"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Ställ in som bakgrundsmusik?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Inställningar"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "av"
|
||||
msgid "seconds left"
|
||||
msgstr "sekunder kvar"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Sökväg till bakgrundsmusik ändrad."
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Ställ in som bakgrundsmusik?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Filen är inte en .wad"
|
||||
|
||||
@ -1357,30 +1390,9 @@ msgstr "sekunder kvar"
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "Du använder NTFS filsystem. Pågrund av möjliga skriv fel till en NTFS partition, så är det inte möjligt att installera spel."
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "Ändra spel sökväg"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "Musik Återuppspelningsläge"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "Partitions formaterings meny"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "Spela nästa"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "Spela förgående"
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "Spela musik:"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "återställ BG musik"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "Återställ till standard BGM?"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "Lås upp appen först."
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: Miller Liang\n"
|
||||
"Language-Team: kyogc, Miller\n"
|
||||
@ -188,9 +188,6 @@ msgstr "返回 Wii 系統目錄"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "背景音樂"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "背景音樂路徑"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "非常感謝:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "無法刪除:"
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr "變更路徑"
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "頻道"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "鎖定控制台"
|
||||
msgid "Locked"
|
||||
msgstr "已鎖定"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "重複音樂"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "圖片格式錯誤,可能它的尺寸不是 4 的倍數."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "掛載DVD光碟"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr "音樂循環模式"
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "音量"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "從列表中選取"
|
||||
msgid "Play Count"
|
||||
msgstr "執行次數"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr "執行下一個"
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr "執行上一個"
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr "播放音樂"
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "請稍候..."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "發布者"
|
||||
msgid "Quick Boot"
|
||||
msgstr "快速啟動"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "讀取 WAD 數據... 完成!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "變更WBFS上的遊戲名稱"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr "重置 BG 音樂"
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "重置執行次數"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr "重置回標準 BG 音樂"
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "正在重新啟動"
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "九月"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "關鍵字篩選"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "設定背景音樂"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "的"
|
||||
msgid "seconds left"
|
||||
msgstr "剩餘秒數"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "背景音樂路徑"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "設定背景音樂"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "這不是一個 WAD 文件"
|
||||
|
||||
@ -1357,30 +1390,9 @@ msgstr "剩餘秒數"
|
||||
#~ msgid "You are using NTFS filesystem. Due to possible write errors to a NTFS partition, installing a game is not possible."
|
||||
#~ msgstr "您正在使用 NTFS 文件系統。由於可能一個錯誤寫入到一個 NTFS 分區,這時候是無法安裝遊戲的。"
|
||||
|
||||
#~ msgid "Change Play Path"
|
||||
#~ msgstr "變更路徑"
|
||||
|
||||
#~ msgid "Music Loop Mode"
|
||||
#~ msgstr "音樂循環模式"
|
||||
|
||||
#~ msgid "Partition Format Menu"
|
||||
#~ msgstr "磁區格式化"
|
||||
|
||||
#~ msgid "Play Next"
|
||||
#~ msgstr "執行下一個"
|
||||
|
||||
#~ msgid "Play Previous"
|
||||
#~ msgstr "執行上一個"
|
||||
|
||||
#~ msgid "Playing Music:"
|
||||
#~ msgstr "播放音樂"
|
||||
|
||||
#~ msgid "Reset BG Music"
|
||||
#~ msgstr "重置 BG 音樂"
|
||||
|
||||
#~ msgid "Reset to standard BGM?"
|
||||
#~ msgstr "重置回標準 BG 音樂"
|
||||
|
||||
#~ msgid "Unlock the app first."
|
||||
#~ msgstr "請先將此應用程式解鎖"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: Nitro_subzero \n"
|
||||
"Language-Team: Nitro_subzero\n"
|
||||
@ -188,9 +188,6 @@ msgstr "กลับไป เมนู Wii"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "ดนตรีเบื้องหลัง"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "เปลี่ยนที่เก็บ ดนตรีเบื้องหลัง"
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "ขอขอบคุณ:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "ไม่สามารถลบได้:"
|
||||
msgid "Cancel"
|
||||
msgstr "ยกเลิก"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "แชนแนล"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "ล๊อค Console"
|
||||
msgid "Locked"
|
||||
msgstr "ล๊อค"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "เล่นเสียงซ้ำ"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "ดูเหมือนว่าขนาดจะหารด้วย
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "เชื่อม DVD ไดร์ฟ"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "ความดังเสียงเพลง"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "เลือกจากรายการ"
|
||||
msgid "Play Count"
|
||||
msgstr "จำนวนที่เล่น"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "รอสักครู่"
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "เผยแพร่โดย"
|
||||
msgid "Quick Boot"
|
||||
msgstr "บูตแบบเร็ว"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "อ่านข้อมูล WAD... สำเร็จ!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "เปลี่ยนชื่อเกมส์บน WBFS"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "เคลียร์การนับจำนวนที่เล่น"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "รีสตารท์..."
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "กย."
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "กำหนดเงื่อนไขการค้นหา"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "เลือกเป็น Background music?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "กำหนดค่า"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "จาก"
|
||||
msgid "seconds left"
|
||||
msgstr "วินาทีที่เหลือ"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "เปลี่ยนที่เก็บ ดนตรีเบื้องหลัง"
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "เลือกเป็น Background music?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "ไม่ใช่ไฟล์ .wad"
|
||||
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: USB Loader GX\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-02-05 14:13+0100\n"
|
||||
"POT-Creation-Date: 2010-02-15 00:12+0100\n"
|
||||
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
|
||||
"Last-Translator: omercigingelini\n"
|
||||
"Language-Team: omercigingelini\n"
|
||||
@ -188,9 +188,6 @@ msgstr "Wii Menüye dönüş"
|
||||
msgid "Backgroundmusic"
|
||||
msgstr "Arkaplan müziği"
|
||||
|
||||
msgid "Backgroundmusic Path changed."
|
||||
msgstr "Arkaplan müzik Yolu değişti."
|
||||
|
||||
msgid "Big thanks to:"
|
||||
msgstr "Teşekkürler:"
|
||||
|
||||
@ -221,6 +218,9 @@ msgstr "Silinemiyor"
|
||||
msgid "Cancel"
|
||||
msgstr "Iptal"
|
||||
|
||||
msgid "Change Play Path"
|
||||
msgstr ""
|
||||
|
||||
msgid "Channels"
|
||||
msgstr "Kanallar"
|
||||
|
||||
@ -756,6 +756,12 @@ msgstr "Konsolu Kilitle"
|
||||
msgid "Locked"
|
||||
msgstr "Kilitlendi"
|
||||
|
||||
msgid "Loop Directory"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Loop Sound"
|
||||
msgstr "Döngüdeki Ses"
|
||||
|
||||
@ -777,6 +783,9 @@ msgstr "Muhtemelen 4 ile tam bölünemeyen boyutları var."
|
||||
msgid "Mount DVD drive"
|
||||
msgstr "DVD sürücüsü bağla"
|
||||
|
||||
msgid "Music Loop Mode"
|
||||
msgstr ""
|
||||
|
||||
msgid "Music Volume"
|
||||
msgstr "Ses Seviyesi"
|
||||
|
||||
@ -924,6 +933,18 @@ msgstr "Listeden seç"
|
||||
msgid "Play Count"
|
||||
msgstr "Oynama Sayısı"
|
||||
|
||||
msgid "Play Next"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Once"
|
||||
msgstr ""
|
||||
|
||||
msgid "Play Previous"
|
||||
msgstr ""
|
||||
|
||||
msgid "Playing Music:"
|
||||
msgstr ""
|
||||
|
||||
msgid "Please wait..."
|
||||
msgstr "Lütfen bekleyin.."
|
||||
|
||||
@ -942,6 +963,9 @@ msgstr "Yayıncı"
|
||||
msgid "Quick Boot"
|
||||
msgstr "Hızlı Başlatma"
|
||||
|
||||
msgid "Random Directory Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reading WAD data... Ok!"
|
||||
msgstr "Wad verisi okunuyor..OK!"
|
||||
|
||||
@ -960,9 +984,15 @@ msgstr ""
|
||||
msgid "Rename Game on WBFS"
|
||||
msgstr "WBFS'deki oyunu yeniden isimlendir"
|
||||
|
||||
msgid "Reset BG Music"
|
||||
msgstr ""
|
||||
|
||||
msgid "Reset Playcounter"
|
||||
msgstr "Sayacı sıfırla"
|
||||
|
||||
msgid "Reset to standard BGM?"
|
||||
msgstr ""
|
||||
|
||||
msgid "Restarting..."
|
||||
msgstr "Yeniden başlatılıyor"
|
||||
|
||||
@ -1014,9 +1044,6 @@ msgstr "Eyl"
|
||||
msgid "Set Search-Filter"
|
||||
msgstr "Arama Filtresi Ayarla"
|
||||
|
||||
msgid "Set as backgroundmusic?"
|
||||
msgstr "Arkaplan müziği olarak ayarla?"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "Ayarlar"
|
||||
|
||||
@ -1348,6 +1375,12 @@ msgstr "./"
|
||||
msgid "seconds left"
|
||||
msgstr "saniye kaldı"
|
||||
|
||||
#~ msgid "Backgroundmusic Path changed."
|
||||
#~ msgstr "Arkaplan müzik Yolu değişti."
|
||||
|
||||
#~ msgid "Set as backgroundmusic?"
|
||||
#~ msgstr "Arkaplan müziği olarak ayarla?"
|
||||
|
||||
#~ msgid "The file is not a .wad"
|
||||
#~ msgstr "Bu dosya .wad değil"
|
||||
|
||||
|
11
Makefile
11
Makefile
@ -25,13 +25,13 @@ SOURCES := source \
|
||||
source/unzip \
|
||||
source/language \
|
||||
source/mload \
|
||||
source/ramdisk \
|
||||
source/patches \
|
||||
source/usbloader \
|
||||
source/xml \
|
||||
source/network \
|
||||
source/settings \
|
||||
source/prompts \
|
||||
source/ramdisk \
|
||||
source/wad \
|
||||
source/banner \
|
||||
source/cheats \
|
||||
@ -40,9 +40,16 @@ SOURCES := source \
|
||||
source/menu \
|
||||
source/libfat \
|
||||
source/memory \
|
||||
source/libntfs
|
||||
source/libntfs \
|
||||
source/usbloader/wbfs \
|
||||
# source/libhfs+ \
|
||||
# source/libhfs+/hfscommon/BTree \
|
||||
# source/libhfs+/hfscommon/Catalog \
|
||||
# source/libhfs+/hfscommon/Misc \
|
||||
# source/libhfs+/hfscommon/Unicode
|
||||
DATA := data
|
||||
INCLUDES := source
|
||||
#source/libhfs+/hfscommon/headers
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
|
Binary file not shown.
BIN
data/ehcmodule_frag_v4.bin
Normal file
BIN
data/ehcmodule_frag_v4.bin
Normal file
Binary file not shown.
BIN
data/ehcmodule_frag_v5.bin
Normal file
BIN
data/ehcmodule_frag_v5.bin
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
2
gui.pnps
2
gui.pnps
@ -1 +1 @@
|
||||
<pd><ViewState><e p="gui\source\mload" x="false"></e><e p="gui\source\settings" x="true"></e><e p="gui\source\images" x="false"></e><e p="gui\source\libfat" x="false"></e><e p="gui\source\prompts" x="false"></e><e p="gui\source\banner" x="false"></e><e p="gui\source\cheats" x="false"></e><e p="gui\source\libntfs" x="false"></e><e p="gui\source\network" x="false"></e><e p="gui\source\fonts" x="false"></e><e p="gui\source\menu" x="false"></e><e p="gui\source\ramdisk" x="false"></e><e p="gui\source\sounds" x="false"></e><e p="gui\source\wad" x="false"></e><e p="gui" x="true"></e><e p="gui\source\homebrewboot" x="false"></e><e p="gui\source\language" x="false"></e><e p="gui\source" x="true"></e><e p="gui\source\libwbfs" x="false"></e><e p="gui\source\libwiigui" x="false"></e><e p="gui\source\patches" x="false"></e><e p="gui\source\themes" x="false"></e><e p="gui\source\memory" x="false"></e><e p="gui\source\unzip" x="false"></e><e p="gui\source\usbloader" x="true"></e><e p="gui\source\xml" x="false"></e></ViewState></pd>
|
||||
<pd><ViewState><e p="gui\source\libhfs+" x="false"></e><e p="gui\source\mload" x="false"></e><e p="gui\source\settings" x="false"></e><e p="gui\source\images" x="false"></e><e p="gui\source\libfat" x="false"></e><e p="gui\source\prompts" x="false"></e><e p="gui\source\banner" x="false"></e><e p="gui\source\cheats" x="false"></e><e p="gui\source\libntfs" x="false"></e><e p="gui\source\network" x="true"></e><e p="gui\source\fonts" x="false"></e><e p="gui\source\menu" x="false"></e><e p="gui\source\ramdisk" x="false"></e><e p="gui\source\regex" x="false"></e><e p="gui\source\sounds" x="false"></e><e p="gui\source\wad" x="false"></e><e p="gui" x="true"></e><e p="gui\source\homebrewboot" x="false"></e><e p="gui\source\language" x="false"></e><e p="gui\source" x="true"></e><e p="gui\source\libwbfs" x="false"></e><e p="gui\source\libwiigui" x="false"></e><e p="gui\source\patches" x="false"></e><e p="gui\source\themes" x="false"></e><e p="gui\source\memory" x="false"></e><e p="gui\source\unzip" x="false"></e><e p="gui\source\usbloader" x="false"></e><e p="gui\source\xml" x="false"></e></ViewState></pd>
|
@ -19,6 +19,7 @@
|
||||
#include "homebrewboot/BootHomebrew.h"
|
||||
#include "network/networkops.h"
|
||||
#include "menu.h"
|
||||
#include "menu/menus.h"
|
||||
#include "filelist.h"
|
||||
#include "sys.h"
|
||||
#include "network/http.h"
|
||||
@ -33,8 +34,6 @@ extern void ResumeGui();
|
||||
extern void HaltGui();
|
||||
|
||||
/*** Extern variables ***/
|
||||
extern GuiWindow * mainWindow;
|
||||
extern GuiSound * bgMusic;
|
||||
extern GuiImage * bgImg;
|
||||
extern u32 infilesize;
|
||||
extern u32 uncfilesize;
|
||||
|
@ -139,12 +139,6 @@ extern const char *ntfsGetVolumeName (const char *name);
|
||||
*/
|
||||
extern bool ntfsSetVolumeName (const char *name, const char *volumeName);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LIBNTFS_H */
|
||||
|
||||
/*
|
||||
typedef struct _FileInfo FileInfo;
|
||||
|
||||
@ -160,3 +154,8 @@ struct _FileInfo
|
||||
typedef int (*_ntfs_frag_append_t)(void *ff, u32 offset, u32 sector, u32 count);
|
||||
int _NTFS_get_fragments (const char *path, _ntfs_frag_append_t append_fragment, void *callback_data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LIBNTFS_H */
|
||||
|
@ -11,6 +11,11 @@
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
enum {
|
||||
WBFS_DEVICE_USB = 1, /* USB device */
|
||||
WBFS_DEVICE_SDHC /* SDHC device */
|
||||
};
|
||||
|
||||
typedef u32 be32_t;
|
||||
typedef u16 be16_t;
|
||||
|
||||
|
@ -154,27 +154,32 @@ static void do_files(wiidisc_t*d)
|
||||
partition_read(d,apl_offset, apl_header, 0x20,0);
|
||||
apl_size = 0x20 + _be32(apl_header + 0x14) + _be32(apl_header + 0x18);
|
||||
// fake read dol and partition
|
||||
partition_read(d,apl_offset, 0, apl_size,1);
|
||||
if (apl_size)
|
||||
partition_read(d,apl_offset, 0, apl_size,1);
|
||||
partition_read(d,dol_offset, 0, (fst_offset - dol_offset)<<2,1);
|
||||
|
||||
|
||||
fst = wbfs_ioalloc(fst_size);
|
||||
if (fst == 0)
|
||||
wbfs_fatal("malloc fst");
|
||||
partition_read(d,fst_offset, fst, fst_size,0);
|
||||
n_files = _be32(fst + 8);
|
||||
if (fst_size) {
|
||||
fst = wbfs_ioalloc(fst_size);
|
||||
if (fst == 0)
|
||||
wbfs_fatal("malloc fst");
|
||||
partition_read(d,fst_offset, fst, fst_size,0);
|
||||
n_files = _be32(fst + 8);
|
||||
|
||||
if (d->extract_pathname && *d->extract_pathname == 0) {
|
||||
// if empty pathname requested return fst
|
||||
d->extracted_buffer = fst;
|
||||
d->extracted_size = fst_size;
|
||||
d->extract_pathname = NULL;
|
||||
// skip do_fst if only fst requested
|
||||
n_files = 0;
|
||||
if (d->extract_pathname && *d->extract_pathname == 0) {
|
||||
// if empty pathname requested return fst
|
||||
d->extracted_buffer = fst;
|
||||
d->extracted_size = fst_size;
|
||||
d->extract_pathname = NULL;
|
||||
// skip do_fst if only fst requested
|
||||
n_files = 0;
|
||||
}
|
||||
|
||||
if (12*n_files <= fst_size ) {
|
||||
if (n_files > 1)
|
||||
do_fst(d,fst, (char *)fst + 12*n_files, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (n_files > 1)
|
||||
do_fst(d,fst, (char *)fst + 12*n_files, 0);
|
||||
wbfs_iofree(b);
|
||||
wbfs_iofree(apl_header);
|
||||
if (fst != d->extracted_buffer)
|
||||
|
250
source/libwiigui/gui_bgm.cpp
Normal file
250
source/libwiigui/gui_bgm.cpp
Normal file
@ -0,0 +1,250 @@
|
||||
/****************************************************************************
|
||||
* SettingsPrompts
|
||||
* USB Loader GX 2009
|
||||
*
|
||||
* Backgroundmusic
|
||||
***************************************************************************/
|
||||
#include <sys/dir.h>
|
||||
#include "gui_bgm.h"
|
||||
#include "menu.h"
|
||||
|
||||
GuiBGM::GuiBGM(const u8 *s, int l, int v)
|
||||
:GuiSound(s, l, v)
|
||||
{
|
||||
loop = 0;
|
||||
loopMode = ONCE;
|
||||
currentPath = NULL;
|
||||
currentPlaying = 0;
|
||||
|
||||
//shouldn't be needed but
|
||||
//fixes some kind of weird bug in ogg system
|
||||
GuiSound::Load(s, l, v);
|
||||
}
|
||||
|
||||
GuiBGM::~GuiBGM()
|
||||
{
|
||||
if(currentPath)
|
||||
delete [] currentPath;
|
||||
|
||||
ClearList();
|
||||
};
|
||||
|
||||
void GuiBGM::SetLoop(bool l)
|
||||
{
|
||||
}
|
||||
|
||||
void GuiBGM::SetLoop(int l)
|
||||
{
|
||||
loop = false;
|
||||
loopMode = ONCE;
|
||||
|
||||
if(l == LOOP)
|
||||
{
|
||||
loop = true;
|
||||
}
|
||||
else
|
||||
loopMode = l;
|
||||
}
|
||||
|
||||
bool GuiBGM::Load(const char *path)
|
||||
{
|
||||
if(!path)
|
||||
{
|
||||
LoadStandard();
|
||||
return false;
|
||||
}
|
||||
if(strcmp(path, "") == 0)
|
||||
{
|
||||
LoadStandard();
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!GuiSound::Load(path))
|
||||
{
|
||||
LoadStandard();
|
||||
return false;
|
||||
}
|
||||
|
||||
return ParsePath(path);
|
||||
}
|
||||
|
||||
bool GuiBGM::LoadStandard()
|
||||
{
|
||||
ClearList();
|
||||
if(currentPath)
|
||||
{
|
||||
delete [] currentPath;
|
||||
currentPath = NULL;
|
||||
}
|
||||
|
||||
strcpy(Settings.ogg_path, "");
|
||||
|
||||
bool ret = GuiSound::Load(bg_music_ogg, bg_music_ogg_size, true);
|
||||
|
||||
if(ret)
|
||||
Play();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool GuiBGM::ParsePath(const char * folderpath)
|
||||
{
|
||||
ClearList();
|
||||
|
||||
if(currentPath)
|
||||
delete [] currentPath;
|
||||
|
||||
currentPath = new char[strlen(folderpath)+1];
|
||||
sprintf(currentPath, "%s", folderpath);
|
||||
|
||||
char * isdirpath = strrchr(folderpath, '.');
|
||||
if(isdirpath)
|
||||
{
|
||||
char * pathptr = strrchr(currentPath, '/');
|
||||
if(pathptr)
|
||||
{
|
||||
pathptr++;
|
||||
pathptr[0] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
char * LoadedFilename = strrchr(folderpath, '/')+1;
|
||||
|
||||
char filename[1024];
|
||||
struct stat st;
|
||||
|
||||
DIR_ITER * dir = diropen(currentPath);
|
||||
if (dir == NULL)
|
||||
{
|
||||
LoadStandard();
|
||||
return false;
|
||||
}
|
||||
u32 counter = 0;
|
||||
|
||||
while (dirnext(dir,filename,&st) == 0)
|
||||
{
|
||||
char * fileext = strrchr(filename, '.');
|
||||
if(fileext)
|
||||
{
|
||||
if(strcasecmp(fileext, ".mp3") == 0 || strcasecmp(fileext, ".ogg") == 0
|
||||
|| strcasecmp(fileext, ".wav") == 0)
|
||||
{
|
||||
AddEntrie(filename);
|
||||
|
||||
if(strcmp(LoadedFilename, filename) == 0)
|
||||
currentPlaying = counter;
|
||||
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dirclose(dir);
|
||||
|
||||
snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s", folderpath);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void GuiBGM::AddEntrie(const char * filename)
|
||||
{
|
||||
if(!filename)
|
||||
return;
|
||||
|
||||
char * NewEntrie = new char[strlen(filename)+1];
|
||||
sprintf(NewEntrie, "%s", filename);
|
||||
|
||||
PlayList.push_back(NewEntrie);
|
||||
}
|
||||
|
||||
void GuiBGM::ClearList()
|
||||
{
|
||||
for(u32 i = 0; i < PlayList.size(); i++)
|
||||
{
|
||||
if(PlayList.at(i) != NULL)
|
||||
{
|
||||
delete [] PlayList.at(i);
|
||||
PlayList.at(i) = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
PlayList.clear();
|
||||
}
|
||||
|
||||
bool GuiBGM::PlayNext()
|
||||
{
|
||||
if(!currentPath)
|
||||
return false;
|
||||
|
||||
currentPlaying++;
|
||||
if(currentPlaying >= (int) PlayList.size())
|
||||
currentPlaying = 0;
|
||||
|
||||
snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s%s", currentPath, PlayList.at(currentPlaying));
|
||||
|
||||
if(!GuiSound::Load(Settings.ogg_path))
|
||||
return false;
|
||||
|
||||
Play();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GuiBGM::PlayPrevious()
|
||||
{
|
||||
if(!currentPath)
|
||||
return false;
|
||||
|
||||
currentPlaying--;
|
||||
if(currentPlaying < 0)
|
||||
currentPlaying = PlayList.size()-1;
|
||||
|
||||
snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s%s", currentPath, PlayList.at(currentPlaying));
|
||||
|
||||
if(!GuiSound::Load(Settings.ogg_path))
|
||||
return false;
|
||||
|
||||
Play();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GuiBGM::PlayRandom()
|
||||
{
|
||||
if(!currentPath)
|
||||
return false;
|
||||
|
||||
srand (time(NULL));
|
||||
|
||||
currentPlaying = rand() % PlayList.size();
|
||||
|
||||
//just in case
|
||||
if(currentPlaying < 0)
|
||||
currentPlaying = PlayList.size()-1;
|
||||
else if(currentPlaying >= (int) PlayList.size())
|
||||
currentPlaying = 0;
|
||||
|
||||
snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s%s", currentPath, PlayList.at(currentPlaying));
|
||||
|
||||
if(!GuiSound::Load(Settings.ogg_path))
|
||||
return false;
|
||||
|
||||
Play();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void GuiBGM::UpdateState()
|
||||
{
|
||||
if(!IsPlaying())
|
||||
{
|
||||
if(loopMode == DIR_LOOP)
|
||||
{
|
||||
PlayNext();
|
||||
}
|
||||
else if(loopMode == RANDOM_BGM)
|
||||
{
|
||||
PlayRandom();
|
||||
}
|
||||
}
|
||||
}
|
45
source/libwiigui/gui_bgm.h
Normal file
45
source/libwiigui/gui_bgm.h
Normal file
@ -0,0 +1,45 @@
|
||||
/****************************************************************************
|
||||
* SettingsPrompts
|
||||
* USB Loader GX 2009
|
||||
*
|
||||
* Backgroundmusic
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _BGM_H_
|
||||
#define _BGM_H_
|
||||
|
||||
#include "libwiigui/gui.h"
|
||||
|
||||
enum
|
||||
{
|
||||
ONCE = 0,
|
||||
LOOP,
|
||||
RANDOM_BGM,
|
||||
DIR_LOOP
|
||||
};
|
||||
|
||||
class GuiBGM : public GuiSound
|
||||
{
|
||||
public:
|
||||
GuiBGM(const u8 *s, int l, int v);
|
||||
~GuiBGM();
|
||||
bool Load(const char *path);
|
||||
bool LoadStandard();
|
||||
bool ParsePath(const char * folderpath);
|
||||
bool PlayNext();
|
||||
bool PlayPrevious();
|
||||
bool PlayRandom();
|
||||
void SetLoop(bool l);
|
||||
void SetLoop(int l);
|
||||
void UpdateState();
|
||||
protected:
|
||||
void AddEntrie(const char * filename);
|
||||
void ClearList();
|
||||
|
||||
int currentPlaying;
|
||||
int loopMode;
|
||||
char * currentPath;
|
||||
std::vector<char *> PlayList;
|
||||
};
|
||||
|
||||
#endif
|
@ -31,6 +31,7 @@ extern "C"
|
||||
#include "settings/cfg.h"
|
||||
#include "language/gettext.h"
|
||||
#include "mload/mload.h"
|
||||
#include "mload/mload_modules.h"
|
||||
#include "FreeTypeGX.h"
|
||||
#include "video.h"
|
||||
#include "audio.h"
|
||||
@ -255,7 +256,7 @@ main(int argc, char *argv[])
|
||||
ios249rev = getIOSrev(0x00000001000000f9ll);
|
||||
|
||||
//if we don't like either of the cIOS then scram
|
||||
if (!(ios222rev==4 || (ios249rev>=9 && ios249rev<65280)))
|
||||
if (!(ios222rev==4 || ios222rev==5 || (ios249rev>=9 && ios249rev<65280)))
|
||||
{
|
||||
InitTextVideo();
|
||||
printf("\x1b[2J");
|
||||
@ -409,11 +410,11 @@ main(int argc, char *argv[])
|
||||
if ((Settings.cios == ios222 && IOS_GetVersion() != 222) ||
|
||||
(Settings.cios == ios223 && IOS_GetVersion() != 223))
|
||||
{
|
||||
printf("\n\tReloading IOS to config setting (%d)...", ios222 ? 222 : 223);
|
||||
printf("\n\tReloading IOS to config setting (%d)...", Settings.cios == ios222 ? 222 : 223);
|
||||
SDCard_deInit(); // unmount SD for reloading IOS
|
||||
USBDevice_deInit(); // unmount USB for reloading IOS
|
||||
USBStorage_Deinit();
|
||||
ret = IOS_ReloadIOSsafe(ios222 ? 222 : 223);
|
||||
ret = IOS_ReloadIOSsafe(Settings.cios == ios222 ? 222 : 223);
|
||||
printf("%d", ret);
|
||||
SDCard_Init();
|
||||
load_ehc_module();
|
||||
|
@ -154,6 +154,9 @@ void *CMEM2Alloc::reallocate(void *p, unsigned int s)
|
||||
s = (s - 1) / sizeof (SBlock) + 1;
|
||||
{
|
||||
LockMutex lock(m_mutex);
|
||||
if (i + s + 1 >= m_endAddress)
|
||||
return 0;
|
||||
|
||||
// Last block
|
||||
if (i->next == 0 && i + s + 1 < m_endAddress)
|
||||
{
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "prompts/ProgressWindow.h"
|
||||
#include "menu/menus.h"
|
||||
#include "mload/mload.h"
|
||||
#include "mload/mload_modules.h"
|
||||
#include "network/networkops.h"
|
||||
#include "patches/patchcode.h"
|
||||
#include "settings/Settings.h"
|
||||
@ -39,7 +40,7 @@ GuiWindow * mainWindow = NULL;
|
||||
GuiImageData * pointer[4];
|
||||
GuiImage * bgImg = NULL;
|
||||
GuiImageData * background = NULL;
|
||||
GuiSound * bgMusic = NULL;
|
||||
GuiBGM * bgMusic = NULL;
|
||||
GuiSound *btnClick2 = NULL;
|
||||
|
||||
struct discHdr *dvdheader = NULL;
|
||||
@ -131,6 +132,8 @@ static void * UpdateGUI (void *arg) {
|
||||
for (int i=0; i < 4; i++)
|
||||
mainWindow->Update(&userInput[i]);
|
||||
|
||||
if(bgMusic)
|
||||
bgMusic->UpdateState();
|
||||
|
||||
} else {
|
||||
for (int a = 5; a < 255; a += 10) {
|
||||
@ -280,20 +283,17 @@ int MainMenu(int menu) {
|
||||
if (strcmp(headlessID,"")==0)
|
||||
ResumeGui();
|
||||
|
||||
bgMusic = new GuiSound(bg_music_ogg, bg_music_ogg_size, Settings.volume);
|
||||
bgMusic->SetLoop(1); //loop music
|
||||
// startup music
|
||||
if (strcmp("", Settings.oggload_path) && strcmp("notset", Settings.ogg_path)) {
|
||||
bgMusic->Load(Settings.ogg_path);
|
||||
}
|
||||
bgMusic = new GuiBGM(bg_music_ogg, bg_music_ogg_size, Settings.volume);
|
||||
bgMusic->SetLoop(Settings.musicloopmode); //loop music
|
||||
bgMusic->Load(Settings.ogg_path);
|
||||
bgMusic->Play();
|
||||
|
||||
while (currentMenu != MENU_EXIT) {
|
||||
bgMusic->SetVolume(Settings.volume);
|
||||
gprintf("Current menu: %d\n", currentMenu);
|
||||
|
||||
switch (currentMenu) {
|
||||
case MENU_CHECK:
|
||||
|
||||
currentMenu = MenuCheck();
|
||||
break;
|
||||
case MENU_FORMAT:
|
||||
@ -516,7 +516,7 @@ int MainMenu(int menu) {
|
||||
gprintf("%d\n", ret);
|
||||
|
||||
if (reloadblock == on && Sys_IsHermes()) {
|
||||
patch_cios_data();
|
||||
enable_ES_ioctlv_vector();
|
||||
if (load_from_fs == PART_FS_WBFS) {
|
||||
mload_close();
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ int MenuCheck() {
|
||||
|
||||
if (Settings.partition != -1 && partitions.num > Settings.partition) {
|
||||
PartInfo pinfo = partitions.pinfo[Settings.partition];
|
||||
if (WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector, partitions.pentry[Settings.partition].size, (char *) &game_partition) == 0)
|
||||
if (!WBFS_OpenPart(pinfo.part_fs, pinfo.index, partitions.pentry[Settings.partition].sector, partitions.pentry[Settings.partition].size, (char *) &game_partition))
|
||||
{
|
||||
ret2 = 0;
|
||||
load_from_fs = pinfo.part_fs;
|
||||
|
@ -89,7 +89,7 @@ int MenuDiscList() {
|
||||
char theTime[80]="";
|
||||
time_t lastrawtime=0;
|
||||
|
||||
if (mountMethod != 3 && load_from_fs != PART_FS_FAT) {
|
||||
if (mountMethod != 3 && WBFS_ShowFreeSpace()) {
|
||||
WBFS_DiskSpace(&used, &freespace);
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define _MENUS_H
|
||||
|
||||
#include "libwiigui/gui.h"
|
||||
#include "libwiigui/gui_bgm.h"
|
||||
#include "language/gettext.h"
|
||||
#include "prompts/PromptWindows.h"
|
||||
#include "menu.h"
|
||||
@ -12,7 +13,7 @@
|
||||
extern void ResumeGui();
|
||||
extern void HaltGui();
|
||||
extern GuiWindow * mainWindow;
|
||||
extern GuiSound * bgMusic;
|
||||
extern GuiBGM * bgMusic;
|
||||
extern u8 shutdown;
|
||||
extern u8 reset;
|
||||
|
||||
|
@ -1,122 +1,374 @@
|
||||
#define size_dip_plugin 3224
|
||||
#define size_dip_plugin 5920
|
||||
|
||||
unsigned char dip_plugin[3224] __attribute__((aligned (32)))={
|
||||
19, 119, 228, 85, 18, 52, 0, 1, 32, 34, 205, 172, 32, 32, 13, 57, 32, 32, 8, 197, 32, 32, 8, 153, 32, 32, 91, 129, 32,
|
||||
32, 0, 73, 32, 32, 40, 117, 32, 32, 54, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 119, 233,
|
||||
160, 19, 119, 233, 117, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 71, 120, 234, 0, 2, 23, 70, 192,
|
||||
71, 120, 234, 0, 2, 39, 70, 192, 71, 120, 234, 0, 2, 55, 70, 192, 71, 120, 234, 0, 2, 47, 70, 192, 71, 120, 234, 0,
|
||||
2, 21, 70, 192, 71, 120, 234, 0, 2, 7, 70, 192, 71, 120, 234, 0, 2, 45, 70, 192, 71, 120, 234, 0, 2, 41, 70, 192, 71,
|
||||
120, 234, 0, 2, 49, 181, 0, 75, 7, 176, 137, 147, 0, 70, 104, 35, 0, 33, 0, 34, 0, 147, 1, 147, 2, 240, 0, 252, 157,
|
||||
176, 9, 188, 2, 71, 8, 70, 192, 227, 0, 0, 0, 181, 16, 28, 3, 34, 32, 28, 12, 72, 13, 28, 25, 247, 255, 255, 210, 33,
|
||||
32, 72, 11, 247, 255, 255, 202, 73, 10, 34, 1, 104, 11, 66, 19, 209, 253, 34, 32, 28, 32, 73, 6, 247, 255, 255, 196,
|
||||
28, 32, 33, 32, 247, 255, 255, 188, 75, 4, 104, 24, 188, 16, 188, 2, 71, 8, 70, 192, 13, 0, 96, 0, 13, 0, 96, 28, 13,
|
||||
0, 96, 32, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 10, 203, 70, 154, 75, 20, 176, 137, 37, 0, 28, 7, 28,
|
||||
14, 70, 145, 70, 108, 70, 155, 70, 168, 70, 91, 96, 35, 70, 67, 96, 99, 96, 163, 70, 83, 96, 227, 28, 56, 70, 75, 28,
|
||||
49, 97, 35, 247, 255, 255, 162, 70, 104, 28, 57, 28, 50, 240, 0, 252, 78, 53, 1, 40, 0, 209, 8, 176, 9, 188, 60, 70,
|
||||
144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 45, 15, 217, 223, 231, 243, 208, 0, 0, 0, 181, 112, 176, 136,
|
||||
75, 8, 28, 6, 28, 13, 70, 108, 147, 0, 96, 97, 146, 2, 247, 255, 255, 129, 28, 49, 28, 42, 70, 104, 240, 0, 252, 45,
|
||||
176, 8, 188, 112, 188, 2, 71, 8, 168, 0, 0, 0, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240, 176, 143, 144, 4,
|
||||
145, 3, 146, 2, 41, 0, 209, 0, 224, 126, 10, 82, 70, 145, 35, 128, 34, 0, 1, 27, 70, 147, 34, 255, 147, 1, 3, 210, 171,
|
||||
6, 146, 0, 70, 152, 224, 7, 154, 3, 68, 179, 69, 90, 217, 62, 154, 5, 24, 179, 10, 219, 68, 153, 154, 3, 70, 91, 26,
|
||||
214, 70, 74, 2, 83, 154, 2, 66, 154, 216, 87, 35, 0, 147, 5, 36, 0, 159, 4, 34, 128, 68, 95, 28, 56, 28, 49, 1, 18,
|
||||
240, 0, 248, 103, 44, 0, 209, 47, 40, 0, 208, 45, 155, 0, 28, 6, 66, 152, 217, 1, 38, 255, 3, 246, 10, 242, 70, 146,
|
||||
36, 0, 75, 43, 70, 66, 96, 19, 35, 0, 96, 83, 96, 147, 70, 83, 96, 211, 70, 75, 97, 19, 28, 56, 28, 49, 247, 255, 255,
|
||||
38, 70, 64, 28, 57, 28, 50, 240, 0, 251, 210, 52, 1, 28, 5, 40, 0, 208, 192, 44, 15, 217, 230, 45, 0, 208, 188, 176,
|
||||
15, 28, 40, 188, 60, 70, 144, 70, 153, 70, 162, 70, 171, 188, 240, 188, 2, 71, 8, 154, 5, 25, 147, 154, 1, 66, 147,
|
||||
217, 1, 155, 5, 26, 214, 32, 128, 1, 0, 33, 32, 247, 255, 254, 251, 28, 4, 40, 0, 208, 18, 33, 128, 1, 9, 70, 74, 247,
|
||||
255, 255, 59, 28, 5, 40, 0, 208, 15, 28, 32, 247, 255, 254, 217, 231, 216, 26, 211, 0, 155, 28, 28, 147, 5, 30, 99,
|
||||
65, 156, 231, 163, 37, 1, 66, 109, 231, 208, 37, 0, 231, 206, 154, 5, 28, 56, 24, 161, 28, 50, 247, 255, 254, 214, 28,
|
||||
56, 28, 49, 247, 255, 254, 206, 231, 228, 70, 192, 208, 0, 0, 0, 181, 48, 28, 13, 28, 20, 6, 195, 209, 18, 75, 15, 66,
|
||||
152, 217, 19, 33, 0, 75, 14, 24, 194, 75, 14, 66, 154, 216, 1, 75, 13, 26, 25, 66, 161, 211, 5, 28, 8, 66, 169, 216,
|
||||
10, 30, 99, 67, 152, 224, 0, 32, 0, 188, 48, 188, 2, 71, 8, 35, 192, 4, 91, 26, 25, 231, 232, 28, 40, 30, 99, 67, 152,
|
||||
231, 244, 1, 127, 255, 255, 240, 0, 0, 0, 3, 97, 127, 255, 19, 97, 128, 0, 71, 112, 70, 192, 181, 48, 28, 4, 72, 15,
|
||||
28, 13, 104, 131, 104, 193, 176, 129, 24, 91, 24, 154, 105, 3, 43, 0, 209, 15, 104, 67, 43, 0, 209, 7, 28, 32, 28, 41,
|
||||
247, 255, 255, 13, 176, 1, 188, 48, 188, 2, 71, 8, 28, 32, 28, 41, 247, 255, 255, 27, 231, 246, 28, 32, 28, 41, 240,
|
||||
0, 249, 246, 231, 241, 70, 192, 19, 119, 240, 0, 181, 240, 79, 27, 35, 1, 28, 4, 96, 59, 176, 129, 33, 32, 247, 255,
|
||||
254, 127, 104, 227, 43, 8, 208, 8, 28, 32, 240, 0, 250, 246, 35, 0, 96, 59, 176, 1, 188, 240, 188, 2, 71, 8, 105, 163,
|
||||
37, 197, 104, 24, 104, 89, 247, 255, 254, 109, 105, 163, 1, 173, 104, 27, 28, 40, 33, 8, 104, 92, 104, 30, 247, 255,
|
||||
254, 100, 75, 10, 4, 36, 64, 30, 67, 52, 78, 9, 96, 44, 28, 40, 33, 4, 96, 52, 247, 255, 254, 73, 28, 48, 33, 4, 247,
|
||||
255, 254, 69, 35, 0, 96, 59, 32, 0, 231, 217, 70, 192, 19, 119, 240, 40, 0, 0, 255, 255, 0, 0, 49, 136, 181, 16, 73,
|
||||
20, 28, 4, 104, 139, 104, 202, 24, 154, 105, 11, 43, 0, 209, 18, 104, 75, 43, 0, 209, 11, 33, 32, 247, 255, 254, 175,
|
||||
40, 0, 219, 3, 105, 162, 75, 12, 66, 154, 208, 10, 188, 16, 188, 2, 71, 8, 33, 32, 247, 255, 254, 185, 231, 242, 33,
|
||||
32, 240, 0, 249, 149, 231, 238, 75, 6, 34, 1, 112, 26, 120, 91, 43, 0, 209, 238, 247, 255, 254, 10, 231, 235, 70, 192,
|
||||
19, 119, 240, 0, 93, 28, 158, 163, 32, 34, 205, 172, 181, 240, 70, 87, 70, 70, 180, 192, 28, 6, 120, 0, 176, 129, 28,
|
||||
15, 70, 144, 40, 224, 208, 24, 77, 145, 35, 0, 98, 43, 28, 3, 59, 112, 43, 143, 217, 13, 28, 48, 28, 57, 70, 66, 240,
|
||||
0, 250, 180, 28, 4, 176, 1, 28, 32, 188, 12, 70, 144, 70, 154, 188, 240, 188, 2, 71, 8, 74, 135, 0, 155, 88, 211, 70,
|
||||
159, 77, 132, 106, 43, 43, 0, 209, 2, 105, 43, 43, 0, 208, 230, 28, 56, 33, 0, 70, 66, 240, 0, 249, 10, 106, 43, 96,
|
||||
59, 28, 56, 70, 65, 247, 255, 253, 212, 36, 0, 231, 223, 104, 107, 43, 0, 209, 2, 105, 43, 43, 0, 208, 211, 36, 0, 231,
|
||||
215, 104, 107, 43, 0, 209, 2, 105, 43, 43, 0, 208, 203, 28, 56, 33, 0, 70, 66, 240, 0, 248, 239, 28, 56, 70, 65, 247,
|
||||
255, 253, 187, 36, 0, 231, 198, 104, 115, 36, 0, 96, 171, 231, 194, 104, 171, 231, 217, 104, 115, 36, 0, 96, 43, 231,
|
||||
188, 104, 43, 231, 211, 104, 115, 97, 43, 43, 0, 208, 6, 28, 40, 28, 49, 48, 24, 49, 8, 34, 6, 247, 255, 253, 166, 105,
|
||||
115, 36, 0, 97, 107, 231, 171, 105, 43, 231, 194, 104, 114, 35, 36, 84, 234, 36, 0, 231, 164, 104, 235, 104, 172, 70,
|
||||
154, 105, 43, 43, 0, 209, 0, 224, 170, 32, 0, 34, 0, 70, 83, 67, 35, 209, 2, 42, 0, 209, 0, 224, 142, 28, 3, 30, 90,
|
||||
65, 147, 96, 107, 28, 56, 70, 65, 247, 255, 255, 70, 28, 4, 231, 139, 35, 1, 34, 37, 84, 171, 104, 43, 43, 0, 209, 0,
|
||||
224, 132, 104, 113, 104, 178, 28, 56, 247, 255, 254, 214, 28, 4, 34, 0, 35, 37, 84, 234, 44, 0, 208, 0, 231, 120, 28,
|
||||
56, 70, 65, 247, 255, 254, 201, 231, 115, 104, 115, 72, 70, 64, 24, 247, 255, 253, 139, 28, 4, 231, 108, 76, 68, 33,
|
||||
64, 28, 32, 247, 255, 253, 106, 34, 0, 28, 33, 224, 3, 50, 1, 42, 64, 209, 0, 231, 90, 92, 163, 43, 0, 208, 248, 34,
|
||||
64, 28, 56, 247, 255, 253, 80, 28, 56, 33, 64, 247, 255, 253, 72, 36, 0, 231, 83, 35, 36, 92, 234, 42, 0, 208, 0, 231,
|
||||
116, 84, 234, 35, 37, 84, 234, 105, 43, 96, 42, 96, 106, 96, 170, 96, 234, 98, 42, 70, 154, 43, 0, 209, 0, 231, 59,
|
||||
105, 108, 247, 255, 253, 73, 70, 80, 28, 41, 28, 34, 56, 1, 49, 24, 240, 0, 248, 206, 28, 4, 231, 53, 104, 113, 104,
|
||||
178, 40, 208, 208, 59, 28, 56, 247, 255, 254, 133, 28, 4, 40, 0, 208, 0, 231, 42, 35, 37, 92, 235, 43, 0, 208, 0, 231,
|
||||
37, 231, 171, 105, 43, 43, 0, 209, 0, 231, 26, 35, 2, 231, 55, 104, 107, 43, 0, 209, 3, 105, 43, 43, 0, 209, 0, 231,
|
||||
17, 104, 115, 104, 178, 7, 155, 67, 19, 74, 24, 36, 0, 64, 19, 96, 235, 231, 14, 104, 107, 43, 0, 208, 17, 75, 21, 36,
|
||||
160, 98, 43, 2, 36, 231, 6, 105, 43, 43, 0, 208, 0, 231, 108, 96, 106, 36, 0, 230, 255, 28, 48, 70, 66, 240, 0, 249,
|
||||
175, 28, 4, 231, 122, 105, 43, 43, 0, 209, 234, 230, 239, 2, 201, 2, 82, 231, 192, 70, 66, 28, 48, 240, 0, 249, 162,
|
||||
28, 2, 30, 83, 65, 154, 231, 78, 70, 192, 19, 119, 240, 0, 19, 119, 234, 32, 127, 255, 255, 255, 19, 119, 233, 160,
|
||||
255, 255, 128, 0, 0, 5, 49, 0, 181, 240, 70, 87, 70, 78, 70, 69, 180, 224, 70, 128, 28, 14, 70, 148, 42, 0, 208, 51,
|
||||
33, 3, 28, 2, 64, 10, 35, 4, 26, 155, 28, 24, 64, 8, 69, 96, 216, 49, 40, 0, 208, 49, 36, 0, 70, 67, 85, 30, 52, 1,
|
||||
66, 160, 216, 250, 69, 132, 208, 32, 70, 99, 26, 27, 8, 159, 70, 153, 0, 187, 70, 154, 43, 0, 208, 17, 4, 51, 6, 50,
|
||||
2, 49, 67, 26, 67, 10, 28, 21, 70, 67, 67, 53, 24, 26, 33, 0, 0, 139, 49, 1, 80, 213, 66, 185, 211, 250, 68, 84, 69,
|
||||
209, 208, 6, 70, 67, 25, 24, 52, 1, 112, 6, 48, 1, 69, 164, 216, 250, 188, 28, 70, 144, 70, 153, 70, 162, 188, 240,
|
||||
188, 1, 71, 0, 70, 96, 231, 203, 36, 0, 231, 211, 70, 192, 181, 112, 76, 17, 28, 6, 104, 32, 176, 130, 28, 13, 98, 2,
|
||||
97, 6, 100, 1, 97, 65, 33, 68, 247, 255, 252, 121, 28, 48, 28, 41, 247, 255, 252, 117, 75, 10, 34, 2, 104, 24, 104,
|
||||
35, 73, 9, 147, 0, 35, 1, 247, 255, 252, 128, 28, 41, 28, 4, 28, 48, 247, 255, 252, 119, 176, 2, 28, 32, 188, 112, 188,
|
||||
2, 71, 8, 19, 119, 240, 44, 19, 119, 240, 48, 87, 70, 83, 2, 181, 240, 176, 133, 28, 4, 28, 15, 146, 3, 40, 2, 216,
|
||||
75, 77, 47, 104, 43, 43, 0, 208, 74, 78, 46, 104, 48, 40, 0, 219, 1, 247, 255, 252, 71, 74, 44, 0, 163, 88, 152, 33,
|
||||
1, 247, 255, 252, 81, 96, 48, 40, 0, 219, 66, 104, 48, 40, 0, 219, 49, 104, 40, 28, 57, 34, 6, 48, 32, 247, 255, 252,
|
||||
61, 104, 40, 169, 3, 34, 4, 48, 64, 247, 255, 252, 55, 104, 42, 36, 4, 28, 19, 51, 32, 96, 19, 104, 42, 35, 6, 96, 83,
|
||||
104, 42, 33, 68, 28, 19, 51, 64, 96, 147, 104, 43, 96, 220, 104, 40, 247, 255, 252, 33, 104, 43, 104, 48, 34, 2, 147,
|
||||
0, 73, 22, 35, 0, 247, 255, 252, 45, 104, 42, 28, 19, 51, 32, 96, 19, 104, 43, 96, 92, 104, 42, 28, 19, 51, 64, 96,
|
||||
147, 104, 43, 96, 220, 176, 5, 188, 240, 188, 2, 71, 8, 32, 1, 66, 64, 231, 248, 75, 11, 78, 8, 96, 43, 35, 1, 66, 91,
|
||||
96, 51, 231, 179, 44, 0, 209, 186, 72, 8, 33, 1, 247, 255, 252, 5, 96, 48, 231, 180, 70, 192, 19, 119, 240, 44, 19,
|
||||
119, 240, 48, 19, 119, 236, 140, 87, 70, 83, 1, 19, 119, 240, 64, 19, 119, 236, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 233, 45, 64, 128, 229, 159, 113, 80, 229, 151, 112, 0, 235, 0, 0, 45, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45,
|
||||
64, 128, 229, 159, 113, 60, 229, 151, 112, 0, 235, 0, 0, 39, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128,
|
||||
229, 159, 113, 40, 229, 151, 112, 0, 235, 0, 0, 33, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128, 229, 159,
|
||||
113, 20, 229, 151, 112, 0, 235, 0, 0, 27, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128, 229, 159, 113, 0, 229,
|
||||
151, 112, 0, 235, 0, 0, 21, 232, 189, 64, 128, 225, 47, 255, 30, 233, 45, 64, 128, 229, 159, 112, 236, 229, 151, 112,
|
||||
0, 235, 0, 0, 15, 232, 189, 64, 128, 225, 47, 255, 30, 230, 0, 8, 16, 225, 47, 255, 30, 230, 0, 7, 240, 225, 47, 255,
|
||||
30, 230, 0, 3, 144, 225, 47, 255, 30, 230, 0, 3, 176, 225, 47, 255, 30, 230, 0, 3, 208, 225, 47, 255, 30, 230, 0, 3,
|
||||
240, 225, 47, 255, 30, 230, 0, 4, 80, 225, 47, 255, 30, 225, 47, 255, 23, 239, 0, 0, 204, 225, 47, 255, 30, 180, 124,
|
||||
181, 0, 247, 255, 252, 254, 188, 2, 188, 124, 71, 8, 181, 112, 176, 136, 104, 133, 28, 1, 75, 34, 71, 24, 70, 192, 70,
|
||||
192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 70, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 114, 28, 1, 32, 4, 223, 171, 71, 16, 181, 240, 70, 95, 70, 86, 70, 77, 70, 68, 180, 240,
|
||||
75, 8, 104, 27, 71, 24, 19, 119, 224, 16, 19, 119, 224, 20, 19, 119, 224, 24, 19, 119, 224, 28, 19, 119, 224, 32, 19,
|
||||
119, 224, 36, 32, 16, 0, 213, 19, 119, 224, 12, 70, 192, 70, 192, 19, 119, 229, 58, 19, 119, 229, 108, 19, 119, 228,
|
||||
120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120,
|
||||
19, 119, 228, 202, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19,
|
||||
119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119,
|
||||
228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230, 58, 19, 119, 228, 120, 19, 119, 229, 220, 19, 119, 228,
|
||||
120, 19, 119, 228, 120, 19, 119, 230, 24, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120,
|
||||
19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19,
|
||||
119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119,
|
||||
228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230,
|
||||
102, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230, 24, 19, 119, 228, 120, 19, 119, 228, 120,
|
||||
19, 119, 228, 196, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19,
|
||||
119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119,
|
||||
228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228,
|
||||
120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120,
|
||||
19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19,
|
||||
119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119,
|
||||
230, 24, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228,
|
||||
120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 230, 70, 19, 119, 229, 170, 19, 119, 228, 120, 19, 119, 228, 120,
|
||||
19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 158, 19, 119, 228, 120, 19, 119, 228, 120, 19,
|
||||
119, 228, 120, 19, 119, 228, 212, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119,
|
||||
228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228,
|
||||
120, 19, 119, 228, 246, 19, 119, 228, 254, 19, 119, 229, 2, 19, 119, 229, 10, 19, 119, 229, 14, 19, 119, 229, 44, 19,
|
||||
119, 229, 48, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119,
|
||||
228, 120, 19, 119, 228, 120, 19, 119, 228, 120, 19, 119, 229, 156, 47, 100, 101, 118, 47, 117, 115, 98, 47, 101, 104,
|
||||
99, 0, 0, 0, 0, 47, 100, 101, 118, 47, 117, 115, 98, 50, 0, 0, 0, 47, 100, 101, 118, 47, 115, 100, 105, 111, 47, 115,
|
||||
100, 104, 99, 0, 0, 19, 119, 236, 112, 19, 119, 236, 124, 19, 119, 236, 96
|
||||
unsigned char dip_plugin[5920] __attribute__((aligned (32)))={
|
||||
0x13, 0x77, 0xe6, 0x11, 0x12, 0x34, 0x00, 0x01, 0x20, 0x22, 0xdd, 0xac, 0x20, 0x20, 0x10, 0x11,
|
||||
0x20, 0x20, 0x0b, 0x9d, 0x20, 0x20, 0x0b, 0x71, 0x20, 0x20, 0x5d, 0xc1, 0x20, 0x20, 0x00, 0x49,
|
||||
0x20, 0x20, 0x2b, 0x4d, 0x20, 0x20, 0x39, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x77, 0xf6, 0x20, 0x13, 0x77, 0xef, 0xe0,
|
||||
0x13, 0x77, 0xed, 0xd5, 0x13, 0x77, 0xf7, 0x20, 0x00, 0x00, 0x08, 0xa0, 0xe1, 0xa0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x71, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x73,
|
||||
0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x83, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x69,
|
||||
0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x79, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x5b,
|
||||
0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x6b, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x5b,
|
||||
0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x89, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x5b,
|
||||
0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x79, 0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x55,
|
||||
0x46, 0xc0, 0x47, 0x78, 0xea, 0x00, 0x03, 0x4f, 0xb5, 0x10, 0x1c, 0x03, 0x22, 0x20, 0x1c, 0x0c,
|
||||
0x48, 0x0d, 0x1c, 0x19, 0xf7, 0xff, 0xff, 0xec, 0x48, 0x0b, 0x21, 0x20, 0xf7, 0xff, 0xff, 0xd4,
|
||||
0x4a, 0x0a, 0x23, 0x01, 0x68, 0x11, 0x42, 0x19, 0xd1, 0xfc, 0x22, 0x20, 0x1c, 0x20, 0x49, 0x06,
|
||||
0xf7, 0xff, 0xff, 0xde, 0x1c, 0x20, 0x21, 0x20, 0xf7, 0xff, 0xff, 0xc6, 0x4b, 0x04, 0x68, 0x18,
|
||||
0xbc, 0x10, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0x0d, 0x00, 0x60, 0x00, 0x0d, 0x00, 0x60, 0x1c,
|
||||
0x0d, 0x00, 0x60, 0x20, 0xb5, 0x70, 0xb0, 0x88, 0x4b, 0x08, 0x1c, 0x06, 0x1c, 0x0d, 0x46, 0x6c,
|
||||
0x93, 0x00, 0x60, 0x61, 0x92, 0x02, 0xf7, 0xff, 0xff, 0xcb, 0x1c, 0x31, 0x1c, 0x2a, 0x46, 0x68,
|
||||
0xf0, 0x00, 0xfe, 0xe8, 0xb0, 0x08, 0xbc, 0x70, 0xbc, 0x02, 0x47, 0x08, 0xa8, 0x00, 0x00, 0x00,
|
||||
0xb5, 0xf0, 0xb0, 0x8b, 0x0a, 0xcb, 0x1c, 0x07, 0x1c, 0x0d, 0x92, 0x01, 0x93, 0x00, 0x26, 0x00,
|
||||
0xac, 0x02, 0x4b, 0x0d, 0x1c, 0x38, 0x60, 0x23, 0x23, 0x00, 0x60, 0x63, 0x60, 0xa3, 0x9b, 0x00,
|
||||
0x1c, 0x29, 0x60, 0xe3, 0x9b, 0x01, 0x36, 0x01, 0x61, 0x23, 0xf7, 0xff, 0xff, 0xa9, 0x1c, 0x20,
|
||||
0x1c, 0x39, 0x1c, 0x2a, 0xf0, 0x00, 0xfe, 0xc6, 0x2e, 0x1f, 0xdc, 0x01, 0x28, 0x00, 0xd1, 0xe8,
|
||||
0xb0, 0x0b, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0xd0, 0x00, 0x00, 0x00, 0xb5, 0xf0, 0xb0, 0x89,
|
||||
0x90, 0x05, 0x91, 0x06, 0x92, 0x07, 0x29, 0x00, 0xd0, 0x79, 0x23, 0x80, 0x0a, 0x52, 0x01, 0x1b,
|
||||
0x92, 0x02, 0x26, 0x00, 0x93, 0x04, 0xe0, 0x6f, 0x9a, 0x06, 0x1b, 0x94, 0x9a, 0x02, 0x02, 0x53,
|
||||
0x9a, 0x07, 0x42, 0x9a, 0xd8, 0x01, 0x23, 0x00, 0xe0, 0x02, 0x9a, 0x07, 0x1a, 0xd3, 0x00, 0x9b,
|
||||
0x93, 0x01, 0x9b, 0x05, 0x22, 0x1f, 0x19, 0x9f, 0x42, 0x17, 0xd1, 0x1c, 0x4b, 0x33, 0x42, 0x9f,
|
||||
0xd9, 0x01, 0x23, 0x00, 0xe0, 0x02, 0x23, 0xc0, 0x04, 0x5b, 0x1b, 0xdb, 0x4a, 0x30, 0x18, 0xb9,
|
||||
0x4a, 0x30, 0x42, 0x91, 0xd8, 0x01, 0x4b, 0x30, 0x1b, 0xdb, 0x4a, 0x30, 0x42, 0x93, 0xd8, 0x01,
|
||||
0x23, 0x00, 0xe0, 0x02, 0x42, 0xa3, 0xd9, 0x00, 0x1c, 0x23, 0x4a, 0x2c, 0x43, 0x93, 0xd0, 0x02,
|
||||
0x9a, 0x01, 0x2a, 0x00, 0xd0, 0x2a, 0x9a, 0x01, 0x19, 0x13, 0x9a, 0x04, 0x42, 0x93, 0xd9, 0x01,
|
||||
0x9b, 0x01, 0x1a, 0xd4, 0x20, 0x80, 0x01, 0x00, 0x21, 0x20, 0xf7, 0xff, 0xff, 0x31, 0x90, 0x03,
|
||||
0x28, 0x00, 0xd1, 0x02, 0x25, 0x01, 0x42, 0x6d, 0xe0, 0x32, 0x21, 0x80, 0x98, 0x03, 0x01, 0x09,
|
||||
0x9a, 0x02, 0xf7, 0xff, 0xff, 0x85, 0x1c, 0x05, 0x28, 0x00, 0xd1, 0x0b, 0x9a, 0x03, 0x9b, 0x01,
|
||||
0x1c, 0x38, 0x18, 0xd1, 0x1c, 0x22, 0xf7, 0xff, 0xff, 0x33, 0x9a, 0x05, 0x1c, 0x21, 0x19, 0x90,
|
||||
0xf7, 0xff, 0xff, 0x1a, 0x98, 0x03, 0xf7, 0xff, 0xff, 0x0b, 0xe0, 0x0c, 0x1c, 0x1c, 0x4b, 0x14,
|
||||
0x42, 0x9c, 0xd9, 0x01, 0x24, 0xff, 0x03, 0xe4, 0x9b, 0x05, 0x1c, 0x21, 0x19, 0x98, 0x9a, 0x02,
|
||||
0xf7, 0xff, 0xff, 0x66, 0x1c, 0x05, 0x2d, 0x00, 0xd1, 0x0a, 0x9a, 0x01, 0x9b, 0x02, 0x19, 0x36,
|
||||
0x18, 0xa4, 0x0a, 0xe4, 0x19, 0x1b, 0x93, 0x02, 0x9a, 0x06, 0x42, 0x96, 0xd3, 0x8c, 0x25, 0x00,
|
||||
0xb0, 0x09, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0x01, 0x7f, 0xff, 0xff,
|
||||
0xf0, 0x00, 0x00, 0x00, 0x03, 0x61, 0x7f, 0xff, 0x13, 0x61, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff,
|
||||
0x00, 0x7f, 0x7f, 0xff, 0xb5, 0x00, 0x4b, 0x07, 0xb0, 0x89, 0x93, 0x00, 0x46, 0x68, 0x23, 0x00,
|
||||
0x21, 0x00, 0x22, 0x00, 0x93, 0x01, 0x93, 0x02, 0xf0, 0x00, 0xfe, 0x1c, 0xb0, 0x09, 0xbc, 0x02,
|
||||
0x47, 0x08, 0x46, 0xc0, 0xe3, 0x00, 0x00, 0x00, 0xb5, 0xf8, 0x4e, 0x26, 0x27, 0x01, 0x1c, 0x04,
|
||||
0x60, 0x37, 0x21, 0x20, 0xf7, 0xff, 0xfe, 0xec, 0x7b, 0x22, 0x7b, 0x63, 0x06, 0x12, 0x04, 0x1b,
|
||||
0x43, 0x13, 0x7b, 0xa2, 0x02, 0x12, 0x43, 0x13, 0x7b, 0xe2, 0x43, 0x13, 0x2b, 0x08, 0xd1, 0x30,
|
||||
0x7e, 0x22, 0x7e, 0x63, 0x06, 0x12, 0x04, 0x1b, 0x43, 0x13, 0x7e, 0xa2, 0x25, 0xc5, 0x02, 0x12,
|
||||
0x43, 0x13, 0x7e, 0xe2, 0x01, 0xad, 0x43, 0x13, 0x68, 0x18, 0x68, 0x59, 0xf7, 0xff, 0xfe, 0xd0,
|
||||
0x7e, 0x22, 0x7e, 0x63, 0x06, 0x12, 0x04, 0x1b, 0x43, 0x13, 0x7e, 0xa2, 0x1c, 0x28, 0x02, 0x12,
|
||||
0x43, 0x13, 0x7e, 0xe2, 0x21, 0x08, 0x43, 0x13, 0x68, 0x1b, 0x68, 0x5c, 0xf7, 0xff, 0xfe, 0xc0,
|
||||
0x04, 0x24, 0x43, 0x27, 0x4c, 0x0c, 0x60, 0x2f, 0x1c, 0x28, 0x21, 0x04, 0x60, 0x27, 0xf7, 0xff,
|
||||
0xfe, 0x9b, 0x1c, 0x20, 0x21, 0x04, 0xf7, 0xff, 0xfe, 0x97, 0x23, 0x00, 0x60, 0x33, 0x20, 0x00,
|
||||
0xe0, 0x04, 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0x3d, 0x23, 0x00, 0x60, 0x33, 0xbc, 0xf8, 0xbc, 0x02,
|
||||
0x47, 0x08, 0x46, 0xc0, 0x13, 0x77, 0xf7, 0x20, 0x00, 0x00, 0x31, 0x88, 0xb5, 0x10, 0x4b, 0x09,
|
||||
0x69, 0x1c, 0x2c, 0x00, 0xd0, 0x02, 0xf0, 0x00, 0xfb, 0xe3, 0xe0, 0x07, 0x68, 0x5b, 0x2b, 0x00,
|
||||
0xd0, 0x02, 0xf7, 0xff, 0xfe, 0xfb, 0xe0, 0x01, 0xf7, 0xff, 0xfe, 0xbc, 0xbc, 0x10, 0xbc, 0x02,
|
||||
0x47, 0x08, 0x46, 0xc0, 0x13, 0x77, 0xf7, 0x28, 0xb5, 0xf0, 0xb0, 0x85, 0x4b, 0x80, 0x90, 0x02,
|
||||
0x91, 0x03, 0x68, 0xdd, 0x68, 0x99, 0x18, 0x6d, 0x18, 0xad, 0x95, 0x00, 0x69, 0x1b, 0x2b, 0x00,
|
||||
0xd0, 0x13, 0x4b, 0x7c, 0x68, 0x1b, 0x2b, 0x00, 0xdd, 0x00, 0xe0, 0xe8, 0x4b, 0x7a, 0x68, 0x19,
|
||||
0x29, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xf7, 0xff, 0xfe, 0x6f, 0x4b, 0x77, 0x22, 0x00, 0x60, 0x1a,
|
||||
0x23, 0x01, 0x4a, 0x76, 0x42, 0x5b, 0x60, 0x13, 0xe0, 0xd9, 0x4b, 0x74, 0x4a, 0x74, 0x68, 0x1b,
|
||||
0x42, 0x93, 0xd1, 0x00, 0xe0, 0xa5, 0x2b, 0x00, 0xda, 0x00, 0xe0, 0xa2, 0x4c, 0x6e, 0x68, 0x23,
|
||||
0x2b, 0x00, 0xd1, 0x06, 0x21, 0x80, 0x20, 0x00, 0x01, 0x89, 0x22, 0x20, 0xf7, 0xff, 0xfe, 0x44,
|
||||
0x60, 0x20, 0x20, 0x80, 0x01, 0x00, 0x21, 0x20, 0xf7, 0xff, 0xfe, 0x32, 0x1c, 0x04, 0x28, 0x00,
|
||||
0xd1, 0x03, 0x23, 0x01, 0x4a, 0x65, 0x42, 0x5b, 0x60, 0x13, 0x4e, 0x64, 0x68, 0x33, 0x2b, 0x00,
|
||||
0xda, 0x02, 0x21, 0x00, 0x91, 0x01, 0xe0, 0x26, 0x1c, 0x35, 0x27, 0x00, 0x68, 0x32, 0x21, 0x80,
|
||||
0x1c, 0x13, 0x33, 0x10, 0x02, 0x5b, 0x02, 0x52, 0x1c, 0x20, 0x01, 0x09, 0x93, 0x01, 0xf7, 0xff,
|
||||
0xff, 0x95, 0x28, 0x00, 0xda, 0x03, 0x23, 0x01, 0x42, 0x5b, 0x60, 0x33, 0xe0, 0x13, 0x78, 0x23,
|
||||
0x2b, 0x43, 0xd1, 0x08, 0x78, 0x63, 0x2b, 0x49, 0xd1, 0x05, 0x78, 0xa3, 0x2b, 0x53, 0xd1, 0x02,
|
||||
0x78, 0xe3, 0x2b, 0x4f, 0xd0, 0x07, 0x68, 0x2b, 0x2b, 0x00, 0xd0, 0x01, 0x60, 0x2f, 0xe7, 0xdd,
|
||||
0x23, 0x01, 0x42, 0x5b, 0x60, 0x2b, 0x4e, 0x4d, 0x68, 0x33, 0x2b, 0x00, 0xdb, 0x54, 0x4b, 0x4a,
|
||||
0x68, 0x1b, 0x2b, 0x00, 0xd0, 0x50, 0x79, 0x62, 0x79, 0xa3, 0x02, 0x12, 0x04, 0x1b, 0x18, 0xd2,
|
||||
0x79, 0x23, 0x48, 0x48, 0x18, 0xd2, 0x79, 0xe3, 0x21, 0x00, 0x06, 0x1b, 0x18, 0xd2, 0x4b, 0x46,
|
||||
0x08, 0x92, 0x60, 0x1a, 0x22, 0x80, 0x01, 0x12, 0xf0, 0x00, 0xfa, 0x50, 0x27, 0x08, 0x25, 0x00,
|
||||
0x4a, 0x42, 0x42, 0x17, 0xd1, 0x11, 0x4b, 0x42, 0x42, 0x9d, 0xdd, 0x0e, 0x68, 0x33, 0x12, 0xfa,
|
||||
0x18, 0xd2, 0x21, 0x80, 0x02, 0x52, 0x1c, 0x20, 0x01, 0x09, 0xf7, 0xff, 0xff, 0x4f, 0x28, 0x00,
|
||||
0xda, 0x03, 0x23, 0x01, 0x42, 0x5b, 0x60, 0x33, 0xe0, 0x20, 0x20, 0x07, 0x40, 0x28, 0xd1, 0x05,
|
||||
0x4b, 0x31, 0x10, 0xea, 0x68, 0x1b, 0x99, 0x01, 0x00, 0x92, 0x50, 0xd1, 0x4b, 0x33, 0x40, 0x3b,
|
||||
0x5c, 0xe3, 0x2b, 0x00, 0xd0, 0x0c, 0x4a, 0x2f, 0x21, 0x01, 0x10, 0xeb, 0x40, 0x81, 0x1c, 0x08,
|
||||
0x5c, 0xd1, 0x43, 0x01, 0x54, 0xd1, 0x4b, 0x2c, 0x9a, 0x01, 0x68, 0x1b, 0x18, 0xd2, 0x92, 0x01,
|
||||
0x23, 0x80, 0x35, 0x01, 0x01, 0xdb, 0x37, 0x01, 0x42, 0x9d, 0xd1, 0xc9, 0x4b, 0x23, 0x68, 0x1a,
|
||||
0x2a, 0x00, 0xdb, 0x01, 0x4a, 0x22, 0x60, 0x1a, 0x2c, 0x00, 0xd0, 0x02, 0x1c, 0x20, 0xf7, 0xff,
|
||||
0xfd, 0x97, 0x4b, 0x1e, 0x4c, 0x1c, 0x68, 0x1a, 0x4b, 0x1d, 0x42, 0x9a, 0xd1, 0x1e, 0x4b, 0x1e,
|
||||
0x98, 0x00, 0x68, 0x1d, 0x1c, 0x29, 0xf0, 0x00, 0xfc, 0xf3, 0x68, 0x23, 0x08, 0xc1, 0x24, 0x07,
|
||||
0x00, 0x8a, 0x58, 0xd2, 0x40, 0x20, 0x23, 0x00, 0x4e, 0x16, 0x24, 0x01, 0xe0, 0x05, 0x5c, 0x77,
|
||||
0x41, 0x1f, 0x42, 0x27, 0xd0, 0x00, 0x19, 0x52, 0x33, 0x01, 0x42, 0x83, 0xd3, 0xf7, 0x9b, 0x00,
|
||||
0x3d, 0x01, 0x40, 0x1d, 0x19, 0x52, 0x98, 0x02, 0x99, 0x03, 0xe0, 0x0b, 0x68, 0x21, 0x29, 0x00,
|
||||
0xd0, 0x02, 0x20, 0x00, 0xf7, 0xff, 0xfd, 0x90, 0x4b, 0x07, 0x22, 0x00, 0x60, 0x1a, 0x98, 0x02,
|
||||
0x99, 0x03, 0x9a, 0x00, 0xf7, 0xff, 0xfe, 0xea, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08,
|
||||
0x13, 0x77, 0xf7, 0x28, 0x13, 0x77, 0xf7, 0xa0, 0x13, 0x77, 0xf7, 0x24, 0x13, 0x77, 0xf6, 0x04,
|
||||
0x7f, 0xff, 0xff, 0xff, 0x13, 0x77, 0xf7, 0xc0, 0x13, 0x77, 0xf7, 0x50, 0x00, 0x00, 0x07, 0xff,
|
||||
0x00, 0x00, 0x07, 0xf7, 0xb5, 0x70, 0x22, 0x00, 0x21, 0x20, 0x1c, 0x04, 0xf7, 0xff, 0xfe, 0xe4,
|
||||
0x69, 0xa2, 0x4b, 0x09, 0x1c, 0x05, 0x42, 0x9a, 0xd1, 0x09, 0x4b, 0x08, 0x21, 0x01, 0x68, 0x1a,
|
||||
0x70, 0x11, 0x68, 0x1b, 0x78, 0x5b, 0x2b, 0x00, 0xd1, 0x01, 0xf7, 0xff, 0xfd, 0x51, 0x1c, 0x28,
|
||||
0xbc, 0x70, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0x5d, 0x1c, 0x9e, 0xa3, 0x13, 0x77, 0xe0, 0x08,
|
||||
0xb5, 0xf0, 0xb0, 0x83, 0x92, 0x01, 0x4a, 0xb9, 0x1c, 0x05, 0x68, 0x13, 0x1c, 0x0c, 0x78, 0x06,
|
||||
0x2b, 0x00, 0xd0, 0x0e, 0x4b, 0xb6, 0x4f, 0xb7, 0x68, 0x1a, 0x68, 0x38, 0x21, 0x00, 0xf0, 0x00,
|
||||
0xf9, 0x95, 0x4a, 0xb3, 0x68, 0x38, 0x68, 0x11, 0xf7, 0xff, 0xfd, 0x26, 0x4a, 0xaf, 0x23, 0x00,
|
||||
0x60, 0x13, 0x2e, 0xe0, 0xd0, 0x55, 0x4f, 0xb0, 0x23, 0x00, 0x62, 0x3b, 0x2e, 0xd0, 0xd1, 0x00,
|
||||
0xe1, 0x6e, 0x2e, 0xd0, 0xd8, 0x26, 0x2e, 0x79, 0xd0, 0x62, 0x2e, 0x79, 0xd8, 0x0f, 0x2e, 0x15,
|
||||
0xd1, 0x00, 0xe0, 0xb3, 0x2e, 0x15, 0xd8, 0x03, 0x2e, 0x13, 0xd2, 0x00, 0xe1, 0x6a, 0xe0, 0x8d,
|
||||
0x2e, 0x70, 0xd1, 0x00, 0xe1, 0x00, 0x2e, 0x71, 0xd0, 0x00, 0xe1, 0x63, 0xe0, 0xe6, 0x2e, 0xa4,
|
||||
0xd1, 0x00, 0xe0, 0xbf, 0x2e, 0xa4, 0xd8, 0x06, 0x2e, 0x8a, 0xd1, 0x00, 0xe1, 0x18, 0x2e, 0x8d,
|
||||
0xd0, 0x00, 0xe1, 0x57, 0xe1, 0x4c, 0x2e, 0xa8, 0xd1, 0x00, 0xe1, 0x49, 0x2e, 0xab, 0xd0, 0x00,
|
||||
0xe1, 0x50, 0xe0, 0x36, 0x2e, 0xf1, 0xd0, 0x50, 0x2e, 0xf1, 0xd8, 0x10, 0x2e, 0xe0, 0xd0, 0x20,
|
||||
0x2e, 0xe0, 0xd8, 0x06, 0x2e, 0xd9, 0xd1, 0x00, 0xe0, 0x94, 0x2e, 0xda, 0xd0, 0x00, 0xe1, 0x41,
|
||||
0xe0, 0xad, 0x2e, 0xe4, 0xd0, 0x31, 0x2e, 0xf0, 0xd0, 0x00, 0xe1, 0x3b, 0xe0, 0x3a, 0x2e, 0xf4,
|
||||
0xd0, 0x47, 0x2e, 0xf4, 0xd8, 0x05, 0x2e, 0xf2, 0xd0, 0x3e, 0x2e, 0xf3, 0xd0, 0x00, 0xe1, 0x31,
|
||||
0xe0, 0x3d, 0x2e, 0xf6, 0xd0, 0x4e, 0x2e, 0xf6, 0xd3, 0x4a, 0x2e, 0xff, 0xd0, 0x00, 0xe1, 0x29,
|
||||
0xe0, 0x71, 0x4b, 0x85, 0x6a, 0x1a, 0x2a, 0x00, 0xd1, 0x03, 0x69, 0x1b, 0x2b, 0x00, 0xd1, 0x00,
|
||||
0xe1, 0x20, 0x1c, 0x20, 0x21, 0x00, 0x9a, 0x01, 0xf0, 0x00, 0xf9, 0x28, 0x4b, 0x7e, 0x6a, 0x1b,
|
||||
0xe0, 0x1c, 0x68, 0x7b, 0x2b, 0x00, 0xd0, 0x00, 0xe1, 0x1a, 0x4b, 0x7b, 0x69, 0x1b, 0xe0, 0x00,
|
||||
0x69, 0x3b, 0x2b, 0x00, 0xd0, 0x00, 0xe1, 0x13, 0xe1, 0x0c, 0x68, 0x7b, 0x2b, 0x00, 0xd1, 0x03,
|
||||
0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x00, 0xe1, 0x05, 0x1c, 0x20, 0x21, 0x00, 0x9a, 0x01, 0xf0, 0x00,
|
||||
0xf9, 0x0d, 0xe0, 0x04, 0x68, 0x6b, 0x60, 0xbb, 0xe1, 0x02, 0x68, 0xbb, 0x60, 0x23, 0x99, 0x01,
|
||||
0x1c, 0x20, 0xf7, 0xff, 0xfc, 0x99, 0xe0, 0xfb, 0x68, 0x6b, 0x60, 0x3b, 0xe0, 0xf8, 0x68, 0x3b,
|
||||
0xe7, 0xf4, 0x68, 0x6b, 0x61, 0x3b, 0x2b, 0x00, 0xd0, 0x06, 0x1c, 0x38, 0x1c, 0x29, 0x30, 0x18,
|
||||
0x31, 0x08, 0x22, 0x06, 0xf7, 0xff, 0xfc, 0x9c, 0x69, 0x6a, 0x4b, 0x63, 0x61, 0x5a, 0xe0, 0xe7,
|
||||
0x69, 0x3b, 0xe7, 0xe3, 0x79, 0x2b, 0x37, 0x05, 0x77, 0xfb, 0xe0, 0xe1, 0x2c, 0x00, 0xd1, 0x00,
|
||||
0xe0, 0xde, 0x2e, 0x13, 0xd1, 0x0b, 0x69, 0x3b, 0x2b, 0x00, 0xd0, 0x0f, 0x4b, 0x5b, 0x68, 0x1b,
|
||||
0x2b, 0x00, 0xd0, 0x07, 0xf0, 0x00, 0xf9, 0xb4, 0x28, 0x00, 0xd0, 0x0b, 0xe0, 0x0c, 0x69, 0x3b,
|
||||
0x2b, 0x00, 0xd0, 0x03, 0x4b, 0x56, 0x68, 0x1b, 0x2b, 0x00, 0xda, 0x05, 0x4b, 0x55, 0x68, 0x1b,
|
||||
0x07, 0xda, 0xd5, 0x01, 0x23, 0x00, 0xe7, 0xc1, 0x23, 0x02, 0xe7, 0xbf, 0x4b, 0x51, 0x22, 0x01,
|
||||
0x68, 0x1b, 0x43, 0x93, 0xe7, 0xba, 0x68, 0x6b, 0x48, 0x4f, 0x1c, 0x21, 0x40, 0x18, 0xf7, 0xff,
|
||||
0xfc, 0x73, 0xe0, 0xb6, 0x68, 0x7b, 0x2b, 0x00, 0xd1, 0x03, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x00,
|
||||
0xe0, 0xa8, 0x68, 0x6a, 0x68, 0xab, 0x07, 0x92, 0x43, 0x1a, 0x4b, 0x48, 0x40, 0x1a, 0x4b, 0x42,
|
||||
0x60, 0xda, 0xe0, 0xa5, 0x68, 0x7b, 0x2b, 0x00, 0xd1, 0x03, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x00,
|
||||
0xe0, 0x98, 0x4a, 0x43, 0x4b, 0x3c, 0x20, 0xa0, 0x62, 0x1a, 0x02, 0x00, 0xe0, 0x99, 0x4e, 0x41,
|
||||
0x21, 0x40, 0x1c, 0x30, 0xf7, 0xff, 0xfc, 0x4c, 0x1c, 0x33, 0x33, 0x40, 0xe0, 0x03, 0x36, 0x01,
|
||||
0x42, 0x9e, 0xd1, 0x00, 0xe0, 0x86, 0x78, 0x32, 0x2a, 0x00, 0xd0, 0xf8, 0x49, 0x39, 0x1c, 0x20,
|
||||
0x22, 0x40, 0xf7, 0xff, 0xfc, 0x35, 0x1c, 0x20, 0x21, 0x40, 0xe7, 0x82, 0x1d, 0xbb, 0x22, 0x01,
|
||||
0x77, 0xda, 0x68, 0x3b, 0x2b, 0x00, 0xd1, 0x05, 0x1c, 0x28, 0x1c, 0x21, 0x9a, 0x01, 0xf0, 0x00,
|
||||
0xfb, 0x51, 0xe0, 0x04, 0x68, 0x69, 0x68, 0xaa, 0x1c, 0x20, 0xf7, 0xff, 0xfd, 0x9d, 0x4b, 0x26,
|
||||
0x22, 0x00, 0x33, 0x06, 0x77, 0xda, 0xe0, 0x6c, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x06, 0x1c, 0x28,
|
||||
0x1c, 0x21, 0x9a, 0x01, 0xf0, 0x00, 0xfb, 0x3e, 0x28, 0x00, 0xd1, 0x0e, 0x4b, 0x1e, 0x68, 0xda,
|
||||
0x2a, 0x00, 0xd1, 0x09, 0x68, 0x9a, 0x2a, 0x00, 0xd1, 0x06, 0x69, 0x1a, 0x2a, 0x00, 0xd1, 0x03,
|
||||
0x69, 0xa0, 0x49, 0x21, 0x42, 0x88, 0xd0, 0x09, 0x20, 0x00, 0x1e, 0x43, 0x41, 0x98, 0x4b, 0x16,
|
||||
0x99, 0x01, 0x60, 0x58, 0x1c, 0x20, 0xf7, 0xff, 0xfe, 0x8d, 0xe0, 0x4a, 0x60, 0x5a, 0xe0, 0x47,
|
||||
0x1d, 0x7b, 0x7f, 0xdb, 0x2b, 0x00, 0xd1, 0x43, 0x1d, 0xba, 0x77, 0xd3, 0x60, 0x3b, 0x60, 0x7b,
|
||||
0x60, 0xbb, 0x60, 0xfb, 0x62, 0x3b, 0x69, 0x3b, 0x2b, 0x00, 0xd1, 0x04, 0x69, 0x7a, 0x4b, 0x13,
|
||||
0x3a, 0x01, 0x60, 0x1a, 0xe0, 0x2e, 0xf7, 0xff, 0xfc, 0xe5, 0x69, 0x38, 0x1c, 0x39, 0x31, 0x18,
|
||||
0x69, 0x7a, 0x38, 0x01, 0xf0, 0x00, 0xf8, 0x62, 0xe0, 0x2b, 0x46, 0xc0, 0x13, 0x77, 0xf6, 0x00,
|
||||
0x13, 0x77, 0xe0, 0x48, 0x13, 0x77, 0xe0, 0x44, 0x13, 0x77, 0xf7, 0x28, 0x13, 0x77, 0xf7, 0xa4,
|
||||
0x13, 0x77, 0xf6, 0x08, 0x0d, 0x00, 0x60, 0x04, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
|
||||
0x00, 0x05, 0x31, 0x00, 0x13, 0x77, 0xef, 0xe0, 0x5d, 0x1c, 0x9e, 0xa3, 0x13, 0x77, 0xf6, 0x04,
|
||||
0x68, 0xaa, 0x68, 0x69, 0x2e, 0xd0, 0xd1, 0x01, 0x02, 0x52, 0x02, 0xc9, 0x1c, 0x20, 0xf7, 0xff,
|
||||
0xfd, 0x33, 0xe0, 0x06, 0x1c, 0x28, 0x1c, 0x21, 0x9a, 0x01, 0xf0, 0x00, 0xfa, 0xdb, 0xe0, 0x00,
|
||||
0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0, 0xb5, 0xf0, 0x2a, 0x00,
|
||||
0xd0, 0x29, 0x24, 0x03, 0x1c, 0x03, 0x40, 0x23, 0x27, 0x04, 0x1a, 0xfb, 0x06, 0x0e, 0x40, 0x23,
|
||||
0x0e, 0x36, 0x1c, 0x05, 0x42, 0x93, 0xd9, 0x01, 0x1c, 0x13, 0xe0, 0x01, 0x2b, 0x00, 0xd0, 0x05,
|
||||
0x1c, 0x1c, 0xe0, 0x01, 0x70, 0x2e, 0x35, 0x01, 0x3c, 0x01, 0xd2, 0xfb, 0x04, 0x0c, 0x06, 0x0d,
|
||||
0x43, 0x25, 0x43, 0x0d, 0x02, 0x0c, 0x1c, 0x29, 0x43, 0x21, 0x18, 0xc4, 0xe0, 0x01, 0xc4, 0x02,
|
||||
0x1c, 0x2b, 0x1d, 0x1d, 0x42, 0x95, 0xd9, 0xfa, 0x18, 0xc0, 0xe0, 0x01, 0x33, 0x01, 0x70, 0x06,
|
||||
0x30, 0x01, 0x42, 0x93, 0xd3, 0xfa, 0xbc, 0xf0, 0xbc, 0x01, 0x47, 0x00, 0xb5, 0xf0, 0xb0, 0x85,
|
||||
0x1c, 0x05, 0x1c, 0x0e, 0x28, 0x01, 0xd9, 0x02, 0x25, 0x01, 0x42, 0x6d, 0xe0, 0x89, 0x4b, 0x47,
|
||||
0x92, 0x03, 0x68, 0x1a, 0x2a, 0x00, 0xd1, 0x02, 0x4a, 0x45, 0x60, 0x1a, 0xe0, 0x05, 0x4b, 0x45,
|
||||
0x68, 0x18, 0x28, 0x00, 0xdb, 0x01, 0xf7, 0xff, 0xfb, 0x47, 0x4a, 0x42, 0x23, 0x01, 0x42, 0x5b,
|
||||
0x60, 0x13, 0x4a, 0x41, 0x4b, 0x41, 0x21, 0x00, 0x60, 0x11, 0x60, 0x19, 0x78, 0x31, 0x29, 0x5f,
|
||||
0xd1, 0x2b, 0x78, 0x71, 0x29, 0x44, 0xd1, 0x28, 0x78, 0xb1, 0x29, 0x45, 0xd1, 0x1e, 0x78, 0xf2,
|
||||
0x2a, 0x56, 0xd1, 0x22, 0x22, 0x01, 0x60, 0x1a, 0x79, 0x32, 0x2a, 0x57, 0xd1, 0x01, 0x22, 0x02,
|
||||
0x60, 0x1a, 0x4c, 0x37, 0x21, 0x80, 0x1c, 0x20, 0x00, 0x49, 0xf7, 0xff, 0xfb, 0x49, 0x1c, 0x20,
|
||||
0x21, 0x00, 0xf7, 0xff, 0xfb, 0x39, 0x4b, 0x2f, 0x1c, 0x05, 0x60, 0x18, 0x28, 0x00, 0xdb, 0x01,
|
||||
0x25, 0x00, 0xe0, 0x4e, 0x4b, 0x2d, 0x22, 0x00, 0x60, 0x1a, 0xe0, 0x4a, 0x29, 0x56, 0xd1, 0x04,
|
||||
0x78, 0xf3, 0x2b, 0x44, 0xd1, 0x01, 0x23, 0x01, 0x60, 0x13, 0x4b, 0x2a, 0x00, 0xaa, 0x58, 0xd0,
|
||||
0x21, 0x01, 0xf7, 0xff, 0xfb, 0x21, 0x4c, 0x23, 0x60, 0x20, 0x28, 0x00, 0xda, 0x06, 0x2d, 0x00,
|
||||
0xd1, 0x04, 0x48, 0x25, 0x21, 0x01, 0xf7, 0xff, 0xfb, 0x17, 0x60, 0x20, 0x4f, 0x1d, 0x68, 0x3d,
|
||||
0x2d, 0x00, 0xdb, 0x2e, 0x4c, 0x19, 0x1c, 0x31, 0x68, 0x20, 0x22, 0x06, 0x30, 0x20, 0xf7, 0xff,
|
||||
0xfb, 0x0f, 0x68, 0x20, 0x22, 0x04, 0xa9, 0x03, 0x30, 0x3c, 0xf7, 0xff, 0xfb, 0x09, 0x68, 0x20,
|
||||
0x26, 0x04, 0x1c, 0x03, 0x33, 0x20, 0x60, 0x03, 0x23, 0x06, 0x60, 0x43, 0x1c, 0x03, 0x33, 0x3c,
|
||||
0x60, 0x83, 0x60, 0xc6, 0x21, 0x40, 0xf7, 0xff, 0xfa, 0xe7, 0x68, 0x23, 0x68, 0x38, 0x49, 0x13,
|
||||
0x93, 0x00, 0x22, 0x02, 0x23, 0x00, 0xf7, 0xff, 0xfa, 0xe3, 0x1c, 0x05, 0x68, 0x20, 0x21, 0x40,
|
||||
0x1c, 0x03, 0x33, 0x20, 0x60, 0x03, 0x33, 0x1c, 0x60, 0x46, 0x60, 0x83, 0x60, 0xc6, 0xf7, 0xff,
|
||||
0xfa, 0xd3, 0xb0, 0x05, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x02, 0x47, 0x08, 0x13, 0x77, 0xf7, 0x54,
|
||||
0x13, 0x77, 0xf7, 0x60, 0x13, 0x77, 0xf6, 0x08, 0x13, 0x77, 0xf7, 0xa4, 0x13, 0x77, 0xf7, 0xa0,
|
||||
0x13, 0x77, 0xf6, 0x20, 0x13, 0x77, 0xf0, 0x48, 0x13, 0x77, 0xf0, 0x20, 0x57, 0x46, 0x53, 0x01,
|
||||
0xb5, 0x00, 0x4b, 0x0b, 0xb0, 0x83, 0x68, 0x1b, 0x2b, 0x00, 0xd0, 0x0c, 0x4b, 0x09, 0x68, 0x18,
|
||||
0x28, 0x00, 0xdb, 0x08, 0x4b, 0x08, 0x49, 0x09, 0x68, 0x1b, 0x22, 0x00, 0x93, 0x00, 0x23, 0x00,
|
||||
0xf7, 0xff, 0xfa, 0xae, 0xe0, 0x00, 0x20, 0x01, 0xb0, 0x03, 0xbc, 0x02, 0x47, 0x08, 0x46, 0xc0,
|
||||
0x13, 0x77, 0xf7, 0xa4, 0x13, 0x77, 0xf6, 0x08, 0x13, 0x77, 0xf7, 0x54, 0x57, 0x46, 0x53, 0x04,
|
||||
0xb5, 0xf0, 0x4d, 0x94, 0xb0, 0x87, 0x68, 0x2b, 0x90, 0x03, 0x91, 0x02, 0x92, 0x04, 0x2b, 0x00,
|
||||
0xda, 0x00, 0xe0, 0xf1, 0x4b, 0x90, 0x68, 0x1b, 0x2b, 0x00, 0xd1, 0x00, 0xe0, 0xef, 0x3b, 0x01,
|
||||
0x2b, 0x01, 0xd9, 0x00, 0xe0, 0xaa, 0x4c, 0x8d, 0x68, 0x23, 0x2b, 0x00, 0xd1, 0x06, 0x21, 0x80,
|
||||
0x20, 0x00, 0x01, 0x89, 0x22, 0x20, 0xf7, 0xff, 0xfa, 0x87, 0x60, 0x20, 0x20, 0x80, 0x01, 0x00,
|
||||
0x21, 0x20, 0xf7, 0xff, 0xfa, 0x75, 0x1c, 0x04, 0x28, 0x00, 0xd1, 0x03, 0x23, 0x01, 0x4a, 0x82,
|
||||
0x42, 0x5b, 0x60, 0x13, 0x4b, 0x80, 0x68, 0x1b, 0x2b, 0x00, 0xda, 0x01, 0x25, 0x00, 0xe0, 0x21,
|
||||
0x4d, 0x7c, 0x21, 0x00, 0x68, 0x28, 0x22, 0x00, 0xf7, 0xff, 0xfa, 0x56, 0x28, 0x00, 0xdb, 0x13,
|
||||
0x22, 0x80, 0x68, 0x28, 0x1c, 0x21, 0x01, 0x12, 0xf7, 0xff, 0xfa, 0x4a, 0x28, 0x00, 0xdb, 0x0b,
|
||||
0x78, 0x23, 0x2b, 0x43, 0xd1, 0x08, 0x78, 0x63, 0x2b, 0x49, 0xd1, 0x05, 0x78, 0xa3, 0x2b, 0x53,
|
||||
0xd1, 0x02, 0x78, 0xe3, 0x2b, 0x4f, 0xd0, 0x03, 0x23, 0x01, 0x4a, 0x6f, 0x42, 0x5b, 0x60, 0x13,
|
||||
0x25, 0x80, 0x01, 0xad, 0x4a, 0x6c, 0x68, 0x13, 0x2b, 0x00, 0xdb, 0x62, 0x4b, 0x6b, 0x68, 0x1b,
|
||||
0x2b, 0x00, 0xd0, 0x5e, 0x79, 0x62, 0x79, 0xa3, 0x02, 0x12, 0x04, 0x1b, 0x18, 0xd2, 0x79, 0x23,
|
||||
0x48, 0x67, 0x18, 0xd2, 0x79, 0xe3, 0x21, 0x00, 0x06, 0x1b, 0x18, 0xd2, 0x4b, 0x65, 0x08, 0x92,
|
||||
0x60, 0x1a, 0x22, 0x80, 0x01, 0x12, 0xf7, 0xff, 0xfe, 0x99, 0x27, 0x08, 0x26, 0x00, 0x4b, 0x62,
|
||||
0x42, 0x1f, 0xd1, 0x21, 0x4a, 0x61, 0x42, 0x96, 0xdd, 0x1e, 0x4b, 0x5b, 0x68, 0x1a, 0x4b, 0x59,
|
||||
0x2a, 0x02, 0xd1, 0x03, 0x12, 0xf9, 0x68, 0x18, 0x02, 0x49, 0xe0, 0x02, 0x49, 0x5c, 0x68, 0x18,
|
||||
0x40, 0x39, 0x22, 0x00, 0xf7, 0xff, 0xfa, 0x08, 0x28, 0x00, 0xdb, 0x08, 0x4b, 0x51, 0x22, 0x80,
|
||||
0x68, 0x18, 0x1c, 0x21, 0x01, 0x12, 0xf7, 0xff, 0xf9, 0xfb, 0x28, 0x00, 0xda, 0x04, 0x23, 0x01,
|
||||
0x4a, 0x4d, 0x42, 0x5b, 0x60, 0x13, 0xe0, 0x1d, 0x20, 0x07, 0x40, 0x30, 0xd1, 0x04, 0x4b, 0x4b,
|
||||
0x10, 0xf2, 0x68, 0x1b, 0x00, 0x92, 0x50, 0xd5, 0x4b, 0x4b, 0x40, 0x3b, 0x5c, 0xe3, 0x2b, 0x00,
|
||||
0xd0, 0x0a, 0x4a, 0x47, 0x21, 0x01, 0x10, 0xf3, 0x40, 0x81, 0x1c, 0x08, 0x5c, 0xd1, 0x43, 0x01,
|
||||
0x54, 0xd1, 0x4b, 0x44, 0x68, 0x1b, 0x18, 0xed, 0x23, 0x80, 0x36, 0x01, 0x01, 0xdb, 0x37, 0x01,
|
||||
0x42, 0x9e, 0xd1, 0xbc, 0x4b, 0x3c, 0x68, 0x1a, 0x2a, 0x00, 0xdb, 0x02, 0x21, 0x04, 0x43, 0x0a,
|
||||
0x60, 0x1a, 0x2c, 0x00, 0xd0, 0x02, 0x1c, 0x20, 0xf7, 0xff, 0xf9, 0xd2, 0x4b, 0x36, 0x4c, 0x37,
|
||||
0x68, 0x1b, 0x93, 0x05, 0x2b, 0x03, 0xdd, 0x2e, 0x4b, 0x36, 0x98, 0x04, 0x68, 0x1d, 0x1c, 0x29,
|
||||
0xf0, 0x00, 0xf9, 0x2e, 0x68, 0x23, 0x08, 0xc2, 0x24, 0x07, 0x00, 0x91, 0x58, 0xc9, 0x40, 0x20,
|
||||
0x23, 0x00, 0x4e, 0x2f, 0x24, 0x01, 0xe0, 0x05, 0x5c, 0xb7, 0x41, 0x1f, 0x42, 0x27, 0xd0, 0x00,
|
||||
0x19, 0x49, 0x33, 0x01, 0x42, 0x83, 0xd3, 0xf7, 0x9a, 0x04, 0x3d, 0x01, 0x40, 0x15, 0x9a, 0x05,
|
||||
0x19, 0x49, 0x4b, 0x24, 0x07, 0x92, 0xd5, 0x01, 0x68, 0x18, 0xe0, 0x01, 0x68, 0x18, 0x00, 0x89,
|
||||
0x22, 0x00, 0xf7, 0xff, 0xf9, 0xa1, 0x4b, 0x1f, 0x99, 0x03, 0x68, 0x18, 0x9a, 0x02, 0xf7, 0xff,
|
||||
0xf9, 0x97, 0x24, 0x00, 0xe0, 0x31, 0x68, 0x21, 0x29, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xf7, 0xff,
|
||||
0xf9, 0xbb, 0x4b, 0x1a, 0x22, 0x00, 0x60, 0x1a, 0x24, 0x01, 0x42, 0x64, 0xe0, 0x25, 0x4c, 0x1d,
|
||||
0x9b, 0x04, 0x68, 0x20, 0x21, 0x40, 0x62, 0x03, 0x9a, 0x02, 0x63, 0xc2, 0x9b, 0x03, 0x61, 0x82,
|
||||
0x61, 0x03, 0xf7, 0xff, 0xf9, 0x91, 0x98, 0x03, 0x99, 0x02, 0xf7, 0xff, 0xf9, 0x8d, 0x4b, 0x16,
|
||||
0x68, 0x1b, 0x2b, 0x00, 0xd0, 0x04, 0x68, 0x23, 0x68, 0x28, 0x49, 0x14, 0x93, 0x00, 0xe0, 0x03,
|
||||
0x68, 0x23, 0x49, 0x13, 0x68, 0x28, 0x93, 0x00, 0x22, 0x02, 0x23, 0x01, 0xf7, 0xff, 0xf9, 0x80,
|
||||
0x99, 0x02, 0x1c, 0x04, 0x98, 0x03, 0xf7, 0xff, 0xf9, 0x93, 0xb0, 0x07, 0x1c, 0x20, 0xbc, 0xf0,
|
||||
0xbc, 0x02, 0x47, 0x08, 0x13, 0x77, 0xf6, 0x08, 0x13, 0x77, 0xf7, 0xa0, 0x13, 0x77, 0xf7, 0x24,
|
||||
0x13, 0x77, 0xf7, 0xc0, 0x13, 0x77, 0xf7, 0x50, 0x00, 0x00, 0x07, 0xff, 0x00, 0x00, 0x07, 0xf7,
|
||||
0xff, 0xff, 0xf8, 0x00, 0x13, 0x77, 0xf7, 0x54, 0x13, 0x77, 0xf7, 0xa4, 0x57, 0x46, 0x53, 0x03,
|
||||
0x57, 0x46, 0x53, 0x02, 0xb4, 0x7c, 0xb5, 0x00, 0xf7, 0xff, 0xfa, 0x7e, 0xbc, 0x02, 0xbc, 0x7c,
|
||||
0x47, 0x08, 0xb5, 0x70, 0xb0, 0x88, 0x68, 0x85, 0x1c, 0x01, 0x4b, 0x01, 0x47, 0x18, 0x00, 0x00,
|
||||
0x20, 0x10, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xe6, 0x00, 0x08, 0x10, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x07, 0xf0, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xe6, 0x00, 0x03, 0x30, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x03, 0x50, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xe6, 0x00, 0x03, 0x90, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x03, 0xb0, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xe6, 0x00, 0x03, 0xd0, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x03, 0xf0, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xe6, 0x00, 0x04, 0x10, 0xe1, 0x2f, 0xff, 0x1e, 0xe6, 0x00, 0x04, 0x50, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xef, 0x00, 0x00, 0xcc, 0xe1, 0x2f, 0xff, 0x1e, 0x46, 0x72, 0x1c, 0x01, 0x20, 0x04, 0xdf, 0xab,
|
||||
0x47, 0x10, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0,
|
||||
0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x9c, 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x1f,
|
||||
0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x88,
|
||||
0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x19, 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x74, 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x13,
|
||||
0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x60,
|
||||
0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x0d, 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x4c, 0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x07,
|
||||
0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e, 0xe9, 0x2d, 0x40, 0x80, 0xe5, 0x9f, 0x70, 0x38,
|
||||
0xe5, 0x97, 0x70, 0x00, 0xeb, 0x00, 0x00, 0x01, 0xe8, 0xbd, 0x40, 0x80, 0xe1, 0x2f, 0xff, 0x1e,
|
||||
0xe1, 0x2f, 0xff, 0x17, 0xb5, 0xf0, 0x46, 0x5f, 0x46, 0x56, 0x46, 0x4d, 0x46, 0x44, 0xb4, 0xf0,
|
||||
0x4b, 0x07, 0x68, 0x1b, 0x47, 0x18, 0x00, 0x00, 0x13, 0x77, 0xe0, 0x10, 0x13, 0x77, 0xe0, 0x14,
|
||||
0x13, 0x77, 0xe0, 0x18, 0x13, 0x77, 0xe0, 0x1c, 0x13, 0x77, 0xe0, 0x20, 0x13, 0x77, 0xe0, 0x24,
|
||||
0x13, 0x77, 0xe0, 0x0c, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0, 0x46, 0xc0,
|
||||
0x29, 0x00, 0xd0, 0x34, 0x23, 0x01, 0x22, 0x00, 0xb4, 0x10, 0x42, 0x88, 0xd3, 0x2c, 0x24, 0x01,
|
||||
0x07, 0x24, 0x42, 0xa1, 0xd2, 0x04, 0x42, 0x81, 0xd2, 0x02, 0x01, 0x09, 0x01, 0x1b, 0xe7, 0xf8,
|
||||
0x00, 0xe4, 0x42, 0xa1, 0xd2, 0x04, 0x42, 0x81, 0xd2, 0x02, 0x00, 0x49, 0x00, 0x5b, 0xe7, 0xf8,
|
||||
0x42, 0x88, 0xd3, 0x01, 0x1a, 0x40, 0x43, 0x1a, 0x08, 0x4c, 0x42, 0xa0, 0xd3, 0x02, 0x1b, 0x00,
|
||||
0x08, 0x5c, 0x43, 0x22, 0x08, 0x8c, 0x42, 0xa0, 0xd3, 0x02, 0x1b, 0x00, 0x08, 0x9c, 0x43, 0x22,
|
||||
0x08, 0xcc, 0x42, 0xa0, 0xd3, 0x02, 0x1b, 0x00, 0x08, 0xdc, 0x43, 0x22, 0x28, 0x00, 0xd0, 0x03,
|
||||
0x09, 0x1b, 0xd0, 0x01, 0x09, 0x09, 0xe7, 0xe3, 0x1c, 0x10, 0xbc, 0x10, 0x47, 0x70, 0xb5, 0x02,
|
||||
0xf0, 0x00, 0xf8, 0x0c, 0x20, 0x00, 0xbc, 0x06, 0x47, 0x10, 0x46, 0xc0, 0xb5, 0x03, 0xf7, 0xff,
|
||||
0xff, 0xbf, 0xbc, 0x0e, 0x43, 0x42, 0x1a, 0x89, 0x47, 0x18, 0x46, 0xc0, 0x47, 0x70, 0x46, 0xc0,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x73, 0x62, 0x32, 0x00, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x73,
|
||||
0x64, 0x69, 0x6f, 0x2f, 0x73, 0x64, 0x68, 0x63, 0x00, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x73,
|
||||
0x62, 0x2f, 0x65, 0x68, 0x63, 0x00, 0x00, 0x00, 0x13, 0x77, 0xf0, 0x20, 0x13, 0x77, 0xf0, 0x2a,
|
||||
0x13, 0x77, 0xf0, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
@ -1,3 +1,3 @@
|
||||
#define size_dip_plugin 3224
|
||||
#define size_dip_plugin 5920
|
||||
|
||||
extern unsigned char dip_plugin[3224];
|
||||
extern unsigned char dip_plugin[5920];
|
||||
|
2127
source/mload/fatffs_module.c
Normal file
2127
source/mload/fatffs_module.c
Normal file
File diff suppressed because it is too large
Load Diff
3
source/mload/fatffs_module.h
Normal file
3
source/mload/fatffs_module.h
Normal file
@ -0,0 +1,3 @@
|
||||
#define size_fatffs_module 58440
|
||||
|
||||
extern unsigned char fatffs_module[58440];
|
291
source/mload/fatffs_util.c
Normal file
291
source/mload/fatffs_util.c
Normal file
@ -0,0 +1,291 @@
|
||||
/*
|
||||
From Custom IOS Module (FAT)
|
||||
|
||||
Copyright (C) 2009 Waninkoko.
|
||||
Copyright (C) 2010 Hermes.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
|
||||
#include "fatffs_util.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/dir.h>
|
||||
#include <sys/stat.h>
|
||||
#include <stdio.h>
|
||||
#include <malloc.h>
|
||||
|
||||
extern u32 nand_mode;
|
||||
|
||||
s32 FAT_DeleteDir(const char *dirpath)
|
||||
{
|
||||
DIR_ITER *dir;
|
||||
|
||||
s32 ret;
|
||||
|
||||
/* Open directory */
|
||||
dir = diropen(dirpath);
|
||||
if (!dir)
|
||||
return -1;
|
||||
|
||||
/* Read entries */
|
||||
for (;;) {
|
||||
char filename[256], newpath[256];
|
||||
struct stat filestat;
|
||||
|
||||
/* Read entry */
|
||||
if (dirnext(dir, filename, &filestat))
|
||||
break;
|
||||
|
||||
/* Non valid entry */
|
||||
if (filename[0]=='.')
|
||||
continue;
|
||||
|
||||
/* Generate entry path */
|
||||
strcpy(newpath, dirpath);
|
||||
strcat(newpath, "/");
|
||||
strcat(newpath, filename);
|
||||
|
||||
/* Delete directory contents */
|
||||
if (filestat.st_mode & S_IFDIR)
|
||||
FAT_DeleteDir(newpath);
|
||||
|
||||
/* Delete object */
|
||||
ret = remove(newpath);
|
||||
|
||||
/* Error */
|
||||
if (ret != 0)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Close directory */
|
||||
dirclose(dir);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int global_error=0;
|
||||
|
||||
static char temp_read_buffer[16384] ATTRIBUTE_ALIGN(32);
|
||||
|
||||
s32 _FFS_to_FAT_Copy(const char *ffsdirpath, const char *fatdirpath)
|
||||
{
|
||||
int n;
|
||||
u32 blocks, ionodes;
|
||||
int pos=0;
|
||||
char *list;
|
||||
s32 ret;
|
||||
|
||||
u32 ionodes_temp;
|
||||
|
||||
if(ISFS_GetUsage(ffsdirpath, &blocks, &ionodes)) {global_error=-1;return -1;}
|
||||
|
||||
|
||||
list= memalign(32, ionodes*13);
|
||||
|
||||
if(!list) {global_error=-2;return -2;}
|
||||
|
||||
if(ISFS_ReadDir(ffsdirpath, list , &ionodes)) {free(list);global_error=-3;return -3;}
|
||||
|
||||
if(ionodes) mkdir(fatdirpath, S_IRWXO | S_IRWXG | S_IRWXU);
|
||||
|
||||
|
||||
/* Read entries */
|
||||
for (n=0;n<ionodes;n++) {
|
||||
char * filename;
|
||||
char newffspath[256], newfatpath[256];
|
||||
|
||||
/* Read entry */
|
||||
filename=&list[pos];
|
||||
pos+=strlen(&list[pos])+1;
|
||||
|
||||
/* Non valid entry */
|
||||
if (filename[0]=='.')
|
||||
continue;
|
||||
|
||||
/* Generate entry path */
|
||||
strcpy(newffspath, ffsdirpath);
|
||||
strcat(newffspath, "/");
|
||||
strcat(newffspath, filename);
|
||||
|
||||
strcpy(newfatpath, fatdirpath);
|
||||
strcat(newfatpath, "/");
|
||||
strcat(newfatpath, filename);
|
||||
|
||||
ret=ISFS_ReadDir(newffspath, NULL, &ionodes_temp);
|
||||
if(ret==0) // it is a directory
|
||||
{
|
||||
|
||||
_FFS_to_FAT_Copy(newffspath, newfatpath);
|
||||
|
||||
if(global_error) {free(list);return global_error;}
|
||||
}
|
||||
|
||||
else // copy the file
|
||||
{
|
||||
int fd;
|
||||
FILE *fp;
|
||||
fd=ISFS_Open(newffspath, ISFS_OPEN_READ);
|
||||
if(fd<0)
|
||||
{
|
||||
global_error=-4;
|
||||
free(list);return global_error;
|
||||
}
|
||||
else
|
||||
{
|
||||
int len;
|
||||
fp=fopen(newfatpath,"w");
|
||||
if(!fd) {ISFS_Close(fd);global_error=-5;free(list);return global_error;}
|
||||
|
||||
len= ISFS_Seek(fd, 0, 2);
|
||||
//if(len<0) {ISFS_Close(fd);global_error=-6;free(list);return global_error;}
|
||||
ISFS_Seek(fd, 0, 0);
|
||||
|
||||
while(len>0)
|
||||
{
|
||||
ret=len; if(len>16384) ret=16384;
|
||||
if(ISFS_Read(fd, temp_read_buffer, ret)!=ret)
|
||||
{
|
||||
global_error=-7;
|
||||
break;
|
||||
}
|
||||
if(fwrite(temp_read_buffer, 1, ret, fp)!=ret)
|
||||
{
|
||||
global_error=-8;
|
||||
break;
|
||||
}
|
||||
len-=ret;
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
ISFS_Close(fd);
|
||||
|
||||
if(global_error) {free(list);return global_error;}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
free(list);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FFS_to_FAT_Copy(const char *ffsdirpath, const char *fatdirpath)
|
||||
{
|
||||
u32 blocks, ionodes;
|
||||
int ret;
|
||||
|
||||
char create_dir[256];
|
||||
|
||||
ISFS_Initialize();
|
||||
|
||||
ret=ISFS_GetUsage(ffsdirpath, &blocks, &ionodes);
|
||||
|
||||
if(ret==0)
|
||||
{
|
||||
int n=0;
|
||||
|
||||
// creating the path directory
|
||||
|
||||
strcpy(create_dir, fatdirpath);
|
||||
|
||||
while(create_dir[n]!=0 && create_dir[n]!='/') n++;
|
||||
|
||||
if(create_dir[n]=='/') n++;
|
||||
|
||||
while(create_dir[n]!=0)
|
||||
{
|
||||
if(create_dir[n]=='/')
|
||||
{
|
||||
create_dir[n]=0;
|
||||
mkdir(create_dir, S_IRWXO | S_IRWXG | S_IRWXU);
|
||||
create_dir[n]='/';
|
||||
}
|
||||
n++;
|
||||
}
|
||||
global_error=0;
|
||||
// copy files
|
||||
_FFS_to_FAT_Copy(ffsdirpath, fatdirpath);
|
||||
|
||||
ret=global_error=0;
|
||||
}
|
||||
else ret=-101;
|
||||
|
||||
ISFS_Deinitialize();
|
||||
|
||||
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
static char temp_cad[512];
|
||||
|
||||
void create_FAT_FFS_Directory(struct discHdr *header)
|
||||
{
|
||||
|
||||
char device[2][4]={
|
||||
"sd:",
|
||||
"ud:"
|
||||
};
|
||||
|
||||
|
||||
if(!header) return;
|
||||
|
||||
sprintf((char *) temp_cad,"%s/nand%c", &device[(nand_mode & 2)!=0][0], (nand_mode & 0xc) ? 49+((nand_mode>>2) & 3) : '\0');
|
||||
|
||||
sprintf((char *) temp_cad+32,"%2.2x%2.2x%2.2x%2.2x", header->id[0], header->id[1], header->id[2], header->id[3]);
|
||||
|
||||
|
||||
sprintf((char *) temp_cad+64,"%s/title/00010000/%s", temp_cad, temp_cad+32);
|
||||
sprintf((char *) temp_cad+128,"%s/title/00010004/%s", temp_cad, temp_cad+32);
|
||||
sprintf((char *) temp_cad+256,"/title/00010000/%s", temp_cad+32);
|
||||
sprintf((char *) temp_cad+384,"/title/00010004/%s", temp_cad+32);
|
||||
|
||||
|
||||
}
|
||||
|
||||
int test_FAT_game(char * directory)
|
||||
{
|
||||
DIR_ITER * dir=NULL;
|
||||
|
||||
dir= diropen(directory);
|
||||
|
||||
if(dir) {dirclose(dir);return 1;}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
char *get_FAT_directory1(void)
|
||||
{
|
||||
return temp_cad+64;
|
||||
}
|
||||
|
||||
char *get_FAT_directory2(void)
|
||||
{
|
||||
return temp_cad+128;
|
||||
}
|
||||
|
||||
char *get_FFS_directory1(void)
|
||||
{
|
||||
return temp_cad+256;
|
||||
}
|
||||
|
||||
char *get_FFS_directory2(void)
|
||||
{
|
||||
return temp_cad+384;
|
||||
}
|
24
source/mload/fatffs_util.h
Normal file
24
source/mload/fatffs_util.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef _FAT_UTIL_
|
||||
#define _FAT_UTIL_
|
||||
|
||||
#include <gctypes.h>
|
||||
|
||||
#include "usbloader/disc.h"
|
||||
|
||||
s32 FAT_DeleteDir(const char *dirpath);
|
||||
|
||||
s32 FFS_to_FAT_Copy(const char *ffsdirpath, const char *fatdirpath);
|
||||
|
||||
void create_FAT_FFS_Directory(struct discHdr *header);
|
||||
|
||||
int test_FAT_game(char * directory);
|
||||
|
||||
char *get_FAT_directory1(void);
|
||||
|
||||
char *get_FAT_directory2(void);
|
||||
|
||||
char *get_FFS_directory1(void);
|
||||
|
||||
char *get_FFS_directory2(void);
|
||||
|
||||
#endif
|
@ -16,19 +16,20 @@
|
||||
*/
|
||||
|
||||
#include "mload.h"
|
||||
#include "ehcmodule_frag_bin.h"
|
||||
#include "dip_plugin.h"
|
||||
#include <malloc.h>
|
||||
|
||||
#include "gecko.h"
|
||||
|
||||
static const char mload_fs[] ATTRIBUTE_ALIGN(32) = "/dev/mload";
|
||||
static u32 patch_datas[8] ATTRIBUTE_ALIGN(32);
|
||||
//static u32 patch_datas[8] ATTRIBUTE_ALIGN(32);
|
||||
|
||||
static s32 mload_fd = -1;
|
||||
static s32 hid = -1;
|
||||
static data_elf my_data_elf;
|
||||
static int thread_id = -1;
|
||||
void *external_ehcmodule= NULL;
|
||||
int size_external_ehcmodule=0;
|
||||
//static data_elf my_data_elf;
|
||||
//static int thread_id = -1;
|
||||
//void *external_ehcmodule= NULL;
|
||||
//int size_external_ehcmodule=0;
|
||||
|
||||
/*--------------------------------------------------------------------------------------------------------------*/
|
||||
|
||||
@ -483,37 +484,7 @@ return ret;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
static u32 ios_36[16] ATTRIBUTE_ALIGN(32)=
|
||||
{
|
||||
0, // DI_EmulateCmd
|
||||
0,
|
||||
0x2022DDAC, // dvd_read_controlling_data
|
||||
0x20201010+1, // handle_di_cmd_reentry (thumb)
|
||||
0x20200b9c+1, // ios_shared_alloc_aligned (thumb)
|
||||
0x20200b70+1, // ios_shared_free (thumb)
|
||||
0x20205dc0+1, // ios_memcpy (thumb)
|
||||
0x20200048+1, // ios_fatal_di_error (thumb)
|
||||
0x20202b4c+1, // ios_doReadHashEncryptedState (thumb)
|
||||
0x20203934+1, // ios_printf (thumb)
|
||||
};
|
||||
|
||||
static u32 ios_38[16] ATTRIBUTE_ALIGN(32)=
|
||||
{
|
||||
0, // DI_EmulateCmd
|
||||
0,
|
||||
0x2022cdac, // dvd_read_controlling_data
|
||||
0x20200d38+1, // handle_di_cmd_reentry (thumb)
|
||||
0x202008c4+1, // ios_shared_alloc_aligned (thumb)
|
||||
0x20200898+1, // ios_shared_free (thumb)
|
||||
0x20205b80+1, // ios_memcpy (thumb)
|
||||
0x20200048+1, // ios_fatal_di_error (thumb)
|
||||
0x20202874+1, // ios_doReadHashEncryptedState (thumb)
|
||||
0x2020365c+1, // ios_printf (thumb)
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
int load_ehc_module()
|
||||
{
|
||||
int is_ios=0;
|
||||
@ -549,7 +520,14 @@ int load_ehc_module()
|
||||
if(!external_ehcmodule)
|
||||
{
|
||||
if(mload_init()<0) return -1;
|
||||
mload_elf((void *) ehcmodule_frag_bin, &my_data_elf);
|
||||
|
||||
if (IOS_GetRevision() == 4) {
|
||||
gprintf("Loading ehcmodule v4\n");
|
||||
mload_elf((void *) ehcmodule_frag_v4_bin, &my_data_elf);
|
||||
} else if (IOS_GetRevision() == 0) { // 0? Strange value for v5 ehcmodule
|
||||
gprintf("Loading ehcmodule v5\n");
|
||||
mload_elf((void *) ehcmodule_frag_v5_bin, &my_data_elf);
|
||||
}
|
||||
thread_id = mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio);
|
||||
if(thread_id < 0) return -1;
|
||||
}
|
||||
@ -579,7 +557,7 @@ int load_ehc_module()
|
||||
{
|
||||
// IOS 36
|
||||
memcpy(ios_36, dip_plugin, 4); // copy the entry_point
|
||||
memcpy(dip_plugin, ios_36, 4*10); // copy the adresses from the array
|
||||
memcpy((void *) dip_plugin, ios_36, 4*10); // copy the adresses from the array
|
||||
|
||||
mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet
|
||||
mload_write(dip_plugin,size_dip_plugin);
|
||||
@ -594,7 +572,7 @@ int load_ehc_module()
|
||||
// IOS 38
|
||||
|
||||
memcpy(ios_38, dip_plugin, 4); // copy the entry_point
|
||||
memcpy(dip_plugin, ios_38, 4*10); // copy the adresses from the array
|
||||
memcpy((void *) dip_plugin, ios_38, 4*10); // copy the adresses from the array
|
||||
|
||||
mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet
|
||||
mload_write(dip_plugin,size_dip_plugin);
|
||||
@ -610,12 +588,11 @@ int load_ehc_module()
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int patch_cios_data() {
|
||||
patch_datas[0]=*((u32 *) (dip_plugin+16*4));
|
||||
mload_set_ES_ioctlv_vector((void *) patch_datas[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
@ -218,8 +218,6 @@ int mload_setb(const void * addr, u8 dat);
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------------------------------------------*/
|
||||
int load_ehc_module();
|
||||
int patch_cios_data();
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
489
source/mload/mload_modules.c
Normal file
489
source/mload/mload_modules.c
Normal file
@ -0,0 +1,489 @@
|
||||
#include "mload_modules.h"
|
||||
#include "ehcmodule_frag_v4_bin.h"
|
||||
#include "ehcmodule_frag_v5_bin.h"
|
||||
#include "gecko.h"
|
||||
|
||||
#define ALIGNED(x) __attribute__((aligned(x)))
|
||||
|
||||
/* Used for Hermes NAND emulation */
|
||||
int global_mount;
|
||||
int sd_ok=0;
|
||||
int ud_ok=0;
|
||||
|
||||
static u32 ios_36[16] ATTRIBUTE_ALIGN(32)=
|
||||
{
|
||||
0, // DI_EmulateCmd
|
||||
0,
|
||||
0x2022DDAC, // dvd_read_controlling_data
|
||||
0x20201010+1, // handle_di_cmd_reentry (thumb)
|
||||
0x20200b9c+1, // ios_shared_alloc_aligned (thumb)
|
||||
0x20200b70+1, // ios_shared_free (thumb)
|
||||
0x20205dc0+1, // ios_memcpy (thumb)
|
||||
0x20200048+1, // ios_fatal_di_error (thumb)
|
||||
0x20202b4c+1, // ios_doReadHashEncryptedState (thumb)
|
||||
0x20203934+1, // ios_printf (thumb)
|
||||
};
|
||||
|
||||
static u32 ios_38[16] ATTRIBUTE_ALIGN(32)=
|
||||
{
|
||||
0, // DI_EmulateCmd
|
||||
0,
|
||||
0x2022cdac, // dvd_read_controlling_data
|
||||
0x20200d38+1, // handle_di_cmd_reentry (thumb)
|
||||
0x202008c4+1, // ios_shared_alloc_aligned (thumb)
|
||||
0x20200898+1, // ios_shared_free (thumb)
|
||||
0x20205b80+1, // ios_memcpy (thumb)
|
||||
0x20200048+1, // ios_fatal_di_error (thumb)
|
||||
0x20202874+1, // ios_doReadHashEncryptedState (thumb)
|
||||
0x2020365c+1, // ios_printf (thumb)
|
||||
};
|
||||
|
||||
|
||||
static u32 ios_37[16] ATTRIBUTE_ALIGN(32)=
|
||||
{
|
||||
0, // DI_EmulateCmd
|
||||
0,
|
||||
0x2022DD60, // dvd_read_controlling_data
|
||||
0x20200F04+1, // handle_di_cmd_reentry (thumb)
|
||||
0x2020096C+1, // ios_shared_alloc_aligned (thumb)
|
||||
0x2020093C+1, // ios_shared_free (thumb)
|
||||
0x20205E54+1, // ios_memcpy (thumb)
|
||||
0x20200048+1, // ios_fatal_di_error (thumb)
|
||||
0x20202A70+1, // ios_doReadHashEncryptedState (thumb)
|
||||
0x2020387C+1, // ios_printf (thumb)
|
||||
};
|
||||
|
||||
static u32 ios_57[16] ATTRIBUTE_ALIGN(32)=
|
||||
{
|
||||
0, // DI_EmulateCmd
|
||||
0,
|
||||
0x2022cd60, // dvd_read_controlling_data
|
||||
0x20200f04+1, // handle_di_cmd_reentry (thumb)
|
||||
0x2020096c+1, // ios_shared_alloc_aligned (thumb) // no usado
|
||||
0x2020093C+1, // ios_shared_free (thumb) // no usado
|
||||
0x20205EF0+1, // ios_memcpy (thumb)
|
||||
0x20200048+1, // ios_fatal_di_error (thumb)
|
||||
0x20202944+1, // ios_doReadHashEncryptedState (thumb)
|
||||
0x20203750+1, // ios_printf (thumb)
|
||||
};
|
||||
|
||||
static u32 ios_60[16] ATTRIBUTE_ALIGN(32)=
|
||||
{
|
||||
0, // DI_EmulateCmd
|
||||
0,
|
||||
0x2022cd60, // dvd_read_controlling_data
|
||||
0x20200f04+1, // handle_di_cmd_reentry (thumb)
|
||||
0x2020096c+1, // ios_shared_alloc_aligned (thumb) // no usado
|
||||
0x2020093C+1, // ios_shared_free (thumb) // no usado
|
||||
0x20205e00+1, // ios_memcpy (thumb)
|
||||
0x20200048+1, // ios_fatal_di_error (thumb)
|
||||
0x20202944+1, // ios_doReadHashEncryptedState (thumb)
|
||||
0x20203750+1, // ios_printf (thumb)
|
||||
};
|
||||
|
||||
|
||||
u32 patch_datas[8] ATTRIBUTE_ALIGN(32);
|
||||
|
||||
data_elf my_data_elf;
|
||||
|
||||
void *external_ehcmodule= NULL;
|
||||
int size_external_ehcmodule=0;
|
||||
|
||||
static int my_thread_id=0;
|
||||
|
||||
int load_ehc_module()
|
||||
{
|
||||
int is_ios=0;
|
||||
|
||||
#if 0
|
||||
|
||||
FILE *fp;
|
||||
|
||||
// WARNING!!!: load external module suspended
|
||||
if(sd_ok && !external_ehcmodule)
|
||||
{
|
||||
|
||||
fp=fopen("sd:/apps/usbloader_gx/ehcmodule.elf","rb");
|
||||
if(fp==NULL)
|
||||
fp=fopen("sd:/apps/usbloadergx/ehcmodule.elf","rb");
|
||||
|
||||
if(fp!=0)
|
||||
{
|
||||
fseek(fp, 0, SEEK_END);
|
||||
size_external_ehcmodule = ftell(fp);
|
||||
external_ehcmodule= memalign(32, size_external_ehcmodule);
|
||||
if(!external_ehcmodule)
|
||||
{fclose(fp);}
|
||||
else
|
||||
{
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
if(fread(external_ehcmodule,1, size_external_ehcmodule ,fp)!=size_external_ehcmodule)
|
||||
{free(external_ehcmodule); external_ehcmodule=NULL;}
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
if(mload_init()<0) return -1;
|
||||
mload_elf((void *) logmodule, &my_data_elf);
|
||||
my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio);
|
||||
if(my_thread_id<0) return -1;
|
||||
*/
|
||||
|
||||
if(!external_ehcmodule)
|
||||
{
|
||||
|
||||
gprintf("before mload_init\n");
|
||||
if(mload_init()<0) return -1;
|
||||
gprintf("after mload_init\n");
|
||||
if (IOS_GetRevision() == 4) {
|
||||
gprintf("Loading ehcmodule v4\n");
|
||||
mload_elf((void *) ehcmodule_frag_v4_bin, &my_data_elf);
|
||||
} else if (IOS_GetRevision() == 65535) {
|
||||
gprintf("Loading ehcmodule v5\n");
|
||||
mload_elf((void *) ehcmodule_frag_v5_bin, &my_data_elf);
|
||||
} else {
|
||||
return -2;
|
||||
}
|
||||
// mload_elf((void *) ehcmodule, &my_data_elf);
|
||||
gprintf("before mload_run_thread\n");
|
||||
my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio);
|
||||
if(my_thread_id<0) return -1;
|
||||
//if(mload_module(ehcmodule, size_ehcmodule)<0) return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
//if(mload_module(external_ehcmodule, size_external_ehcmodule)<0) return -1;
|
||||
if(mload_init()<0) return -1;
|
||||
mload_elf((void *) external_ehcmodule, &my_data_elf);
|
||||
my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio);
|
||||
if(my_thread_id<0) return -1;
|
||||
}
|
||||
usleep(350*1000);
|
||||
|
||||
|
||||
// Test for IOS
|
||||
|
||||
#if 0
|
||||
mload_seek(0x20207c84, SEEK_SET);
|
||||
mload_read(patch_datas, 32);
|
||||
if(patch_datas[0]==0x6e657665 )
|
||||
{
|
||||
is_ios=38;
|
||||
}
|
||||
else
|
||||
{
|
||||
is_ios=36;
|
||||
}
|
||||
|
||||
#endif
|
||||
is_ios=mload_get_IOS_base();
|
||||
|
||||
switch(is_ios)
|
||||
{
|
||||
|
||||
case 36:
|
||||
|
||||
memcpy(ios_36, dip_plugin, 4); // copy the entry_point
|
||||
memcpy(dip_plugin, ios_36, 4*10); // copy the adresses from the array
|
||||
|
||||
mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet
|
||||
mload_write(dip_plugin,size_dip_plugin);
|
||||
|
||||
// enables DIP plugin
|
||||
mload_seek(0x20209040, SEEK_SET);
|
||||
mload_write(ios_36, 4);
|
||||
break;
|
||||
|
||||
case 37:
|
||||
|
||||
memcpy(ios_37, dip_plugin, 4); // copy the entry_point
|
||||
memcpy(dip_plugin, ios_37, 4*10); // copy the adresses from the array
|
||||
|
||||
mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet
|
||||
mload_write(dip_plugin,size_dip_plugin);
|
||||
|
||||
// enables DIP plugin
|
||||
mload_seek(0x20209030, SEEK_SET);
|
||||
mload_write(ios_37, 4);
|
||||
break;
|
||||
|
||||
case 38:
|
||||
|
||||
memcpy(ios_38, dip_plugin, 4); // copy the entry_point
|
||||
memcpy(dip_plugin, ios_38, 4*10); // copy the adresses from the array
|
||||
|
||||
mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet
|
||||
mload_write(dip_plugin,size_dip_plugin);
|
||||
|
||||
// enables DIP plugin
|
||||
mload_seek(0x20208030, SEEK_SET);
|
||||
mload_write(ios_38, 4);
|
||||
break;
|
||||
|
||||
case 57:
|
||||
|
||||
memcpy(ios_57, dip_plugin, 4); // copy the entry_point
|
||||
memcpy(dip_plugin, ios_57, 4*10); // copy the adresses from the array
|
||||
|
||||
mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet
|
||||
mload_write(dip_plugin,size_dip_plugin);
|
||||
|
||||
// enables DIP plugin
|
||||
mload_seek(0x20208030, SEEK_SET);
|
||||
mload_write(ios_57, 4);
|
||||
break;
|
||||
|
||||
case 60:
|
||||
|
||||
memcpy(ios_60, dip_plugin, 4); // copy the entry_point
|
||||
memcpy(dip_plugin, ios_60, 4*10); // copy the adresses from the array
|
||||
|
||||
mload_seek(0x1377E000, SEEK_SET); // copy dip_plugin in the starlet
|
||||
mload_write(dip_plugin,size_dip_plugin);
|
||||
|
||||
// enables DIP plugin
|
||||
mload_seek(0x20208030, SEEK_SET);
|
||||
mload_write(ios_60, 4);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
mload_close();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define IOCTL_FAT_MOUNTSD 0xF0
|
||||
#define IOCTL_FAT_UMOUNTSD 0xF1
|
||||
#define IOCTL_FAT_MOUNTUSB 0xF2
|
||||
#define IOCTL_FAT_UMOUNTUSB 0xF3
|
||||
|
||||
#define IOCTL_FFS_MODE 0x80
|
||||
|
||||
int load_fatffs_module(u8 *discid)
|
||||
{
|
||||
static char fs[] ATTRIBUTE_ALIGN(32) = "fat";
|
||||
s32 hid = -1, fd = -1;
|
||||
static char file_name[256] ALIGNED(0x20)="SD:";
|
||||
int n;
|
||||
char *p;
|
||||
s32 ret;
|
||||
|
||||
p=&file_name[0];
|
||||
|
||||
if(mload_init()<0) return -1;
|
||||
|
||||
mload_elf((void *) fatffs_module, &my_data_elf);
|
||||
my_thread_id= mload_run_thread(my_data_elf.start, my_data_elf.stack, my_data_elf.size_stack, my_data_elf.prio);
|
||||
if(my_thread_id<0) return -1;
|
||||
|
||||
global_mount &=~0xc;
|
||||
|
||||
if(discid)
|
||||
{
|
||||
sd_ok=ud_ok=1;
|
||||
|
||||
/* Function get_fat_name not implemented, this should return the path to the save file */
|
||||
// p=get_fat_name(discid);
|
||||
p = NULL;
|
||||
|
||||
sd_ok=ud_ok=0;
|
||||
|
||||
if(!p) return -1;
|
||||
|
||||
global_mount &=~0xf;
|
||||
|
||||
// change 'ud:' by 'usb:'
|
||||
if(p[0]=='U') {global_mount|=2;file_name[0]='U';file_name[1]='S';file_name[2]='B';memcpy(file_name+3, (void *)p+2, 253);}
|
||||
else {global_mount|=1;memcpy(file_name, (void *) p, 256);}
|
||||
|
||||
// copy filename to dip_plugin filename area
|
||||
mload_seek(*((u32 *) (dip_plugin+14*4)), SEEK_SET); // offset 14 (filename Address - 256 bytes)
|
||||
mload_write(file_name, sizeof(file_name));
|
||||
mload_close();
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if((global_mount & 3)==0) return 0;
|
||||
if(global_mount & 1) p[0]='s';
|
||||
if(global_mount & 2) p[0]='u';
|
||||
}
|
||||
usleep(350*1000);
|
||||
|
||||
/* Create heap */
|
||||
if (hid < 0) {
|
||||
hid = iosCreateHeap(0x100);
|
||||
if (hid < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Open USB device */
|
||||
fd = IOS_Open(fs, 0);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
if(hid>=0)
|
||||
{
|
||||
iosDestroyHeap(hid);
|
||||
hid=-1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
n=30; // try 20 times
|
||||
while(n>0)
|
||||
{
|
||||
if((global_mount & 10)==2) {ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTUSB, ":");if(ret==0) global_mount|=8;}
|
||||
else {ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTSD, ":");if(ret==0) {global_mount|=4;}}
|
||||
|
||||
if((global_mount & 7)==3 && ret==0)
|
||||
{ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTSD, ":");if(ret==0) global_mount|=4;}
|
||||
|
||||
if((global_mount & 3)==((global_mount>>2) & 3) && (global_mount & 3)) {ret=0;break;} else ret=-1;
|
||||
|
||||
//ret=IOS_IoctlvFormat(hid, fd, IOCTL_FAT_MOUNTSD, ":");
|
||||
//if(ret==0) break;
|
||||
usleep(500*1000);
|
||||
n--;
|
||||
}
|
||||
|
||||
if (fd >= 0) {
|
||||
IOS_Close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
if(hid>=0)
|
||||
{
|
||||
iosDestroyHeap(hid);
|
||||
hid=-1;
|
||||
}
|
||||
|
||||
if(n==0) return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int enable_ffs(int mode)
|
||||
{
|
||||
static char fs[] ATTRIBUTE_ALIGN(32) = "fat";
|
||||
s32 hid = -1, fd = -1;
|
||||
s32 ret;
|
||||
|
||||
/* Create heap */
|
||||
if (hid < 0) {
|
||||
hid = iosCreateHeap(0x100);
|
||||
if (hid < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Open USB device */
|
||||
fd = IOS_Open(fs, 0);
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
if(hid>=0)
|
||||
{
|
||||
iosDestroyHeap(hid);
|
||||
hid=-1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
ret=IOS_IoctlvFormat(hid, fd, IOCTL_FFS_MODE, "i:", mode);
|
||||
|
||||
|
||||
if (fd >= 0) {
|
||||
IOS_Close(fd);
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
if(hid>=0)
|
||||
{
|
||||
iosDestroyHeap(hid);
|
||||
hid=-1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void enable_ES_ioctlv_vector(void)
|
||||
{
|
||||
patch_datas[0]=*((u32 *) (dip_plugin+16*4));
|
||||
mload_set_ES_ioctlv_vector((void *) patch_datas[0]);
|
||||
}
|
||||
|
||||
void Set_DIP_BCA_Datas(u8 *bca_data)
|
||||
{
|
||||
// write in dip_plugin bca data area
|
||||
mload_seek(*((u32 *) (dip_plugin+15*4)), SEEK_SET); // offset 15 (bca_data area)
|
||||
mload_write(bca_data, 64);
|
||||
mload_close();
|
||||
}
|
||||
|
||||
u8 *search_for_ehcmodule_cfg(u8 *p, int size)
|
||||
{
|
||||
int n;
|
||||
|
||||
for(n=0;n<size;n++)
|
||||
{
|
||||
if(!memcmp((void *) &p[n],"EHC_CFG",8) && p[n+8]==0x12 && p[n+9]==0x34 && p[n+10]==0x00 && p[n+11]==0x01)
|
||||
{
|
||||
return &p[n];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void test_and_patch_for_port1()
|
||||
{
|
||||
// test for port 1
|
||||
|
||||
u8 * ehc_data = NULL;
|
||||
|
||||
if (IOS_GetRevision() == 4) {
|
||||
ehc_data=search_for_ehcmodule_cfg((void *) ehcmodule_frag_v4_bin, ehcmodule_frag_v4_bin_size);
|
||||
} else if (IOS_GetRevision() == 65535) {
|
||||
ehc_data=search_for_ehcmodule_cfg((void *) ehcmodule_frag_v5_bin, ehcmodule_frag_v5_bin_size);
|
||||
}
|
||||
|
||||
if(ehc_data)
|
||||
{
|
||||
ehc_data+=12;
|
||||
use_port1=ehc_data[0];
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(use_port1)
|
||||
// release port 0 and use port 1
|
||||
{
|
||||
u32 dat=0;
|
||||
u32 addr;
|
||||
|
||||
// get EHCI base registers
|
||||
mload_getw((void *) 0x0D040000, &addr);
|
||||
|
||||
addr&=0xff;
|
||||
addr+=0x0D040000;
|
||||
|
||||
|
||||
mload_getw((void *) (addr+0x44), &dat);
|
||||
if((dat & 0x2001)==1) mload_setw((void *) (addr+0x44), 0x2000);
|
||||
mload_getw((void *) (addr+0x48), &dat);
|
||||
if((dat & 0x2000)==0x2000) mload_setw((void *) (addr+0x48), 0x1001);
|
||||
}
|
||||
}
|
||||
//////////////////////////////////
|
||||
|
30
source/mload/mload_modules.h
Normal file
30
source/mload/mload_modules.h
Normal file
@ -0,0 +1,30 @@
|
||||
#ifndef _MLOAD_MODULES_H_
|
||||
#define _MLOAD_MODULES_H_
|
||||
|
||||
#include "dip_plugin.h"
|
||||
#include "mload.h"
|
||||
#include "fatffs_module.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void *external_ehcmodule;
|
||||
extern int size_external_ehcmodule;
|
||||
extern int use_port1;
|
||||
|
||||
int load_ehc_module();
|
||||
int load_fatffs_module(u8 *discid);
|
||||
|
||||
void enable_ES_ioctlv_vector(void);
|
||||
void Set_DIP_BCA_Datas(u8 *bca_data);
|
||||
|
||||
void test_and_patch_for_port1();
|
||||
|
||||
int enable_ffs(int mode);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -121,7 +121,7 @@ struct block read_message(s32 connection) {
|
||||
buffer.size = offset;
|
||||
|
||||
//Shrink the size of the buffer so the data fits exactly in it
|
||||
realloc(buffer.data, buffer.size);
|
||||
buffer.data = realloc(buffer.data, buffer.size);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
@ -451,6 +451,7 @@ int BrowseDevice(char * Path, int Path_size, int Flags, FILTERCASCADE *Filter/*=
|
||||
}
|
||||
|
||||
if (ExitBtn.GetState() == STATE_CLICKED) {
|
||||
result = 0;
|
||||
break;
|
||||
}
|
||||
else if (okBtn.GetState() == STATE_CLICKED) {
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "libwiigui/gui.h"
|
||||
#include "../xml/xml.h"
|
||||
#include "menu.h"
|
||||
#include "menu/menus.h"
|
||||
#include "filelist.h"
|
||||
#include "sys.h"
|
||||
#include "wpad.h"
|
||||
@ -22,8 +23,6 @@
|
||||
|
||||
|
||||
/*** Extern variables ***/
|
||||
extern GuiWindow * mainWindow;
|
||||
extern GuiSound * bgMusic;
|
||||
extern u8 shutdown;
|
||||
extern u8 reset;
|
||||
extern struct gameXMLinfo gameinfo;
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "cheats/cheatmenu.h"
|
||||
#include "fatmounter.h"
|
||||
#include "menu.h"
|
||||
#include "menu/menus.h"
|
||||
#include "filelist.h"
|
||||
#include "listfiles.h"
|
||||
#include "sys.h"
|
||||
@ -30,7 +31,7 @@ extern void titles_default();
|
||||
|
||||
/*** Extern variables ***/
|
||||
extern GuiWindow * mainWindow;
|
||||
extern GuiSound * bgMusic;
|
||||
extern GuiBGM * bgMusic;
|
||||
extern GuiImage * bgImg;
|
||||
extern GuiImageData * pointer[4];
|
||||
extern GuiImageData * background;
|
||||
@ -1285,8 +1286,6 @@ int MenuSettings()
|
||||
while (optionBrowser2.GetEffect() > 0) usleep(50);
|
||||
|
||||
|
||||
char * oggfile;
|
||||
|
||||
bool firstRun = true;
|
||||
while (!exit)
|
||||
{
|
||||
@ -1336,8 +1335,9 @@ int MenuSettings()
|
||||
w.SetEffect(EFFECT_FADE, -20);
|
||||
while (w.GetEffect()>0) usleep(50);
|
||||
mainWindow->Remove(&w);
|
||||
while (returnhere)
|
||||
returnhere = MenuOGG();
|
||||
|
||||
returnhere = MenuBackgroundMusic();
|
||||
|
||||
HaltGui();
|
||||
mainWindow->Append(&w);
|
||||
w.SetEffect(EFFECT_FADE, 20);
|
||||
@ -1346,13 +1346,15 @@ int MenuSettings()
|
||||
} else
|
||||
WindowPrompt(tr("No SD-Card inserted!"),tr("Insert an SD-Card to use this option."),tr("OK"));
|
||||
}
|
||||
if (!strcmp("notset", Settings.ogg_path))
|
||||
options2.SetValue(Idx, "%s", tr("Standard"));
|
||||
else
|
||||
|
||||
char * filename = strrchr(Settings.ogg_path, '/');
|
||||
if(filename)
|
||||
{
|
||||
oggfile = strrchr(Settings.ogg_path, '/')+1;
|
||||
options2.SetValue(Idx, "%s", oggfile);
|
||||
filename += 1;
|
||||
options2.SetValue(Idx, "%s", filename);
|
||||
}
|
||||
else
|
||||
options2.SetValue(Idx, "%s", tr("Standard"));
|
||||
}
|
||||
|
||||
if(ret == ++Idx || firstRun)
|
||||
@ -1423,6 +1425,42 @@ int MenuSettings()
|
||||
options2.SetValue(Idx,"%s", tr("OFF"));
|
||||
}
|
||||
|
||||
if(ret == ++Idx || firstRun)
|
||||
{
|
||||
if(firstRun) options2.SetName(Idx, "%s",tr("Music Loop Mode"));
|
||||
if(ret == Idx)
|
||||
{
|
||||
Settings.musicloopmode++;
|
||||
if (Settings.musicloopmode > 3)
|
||||
Settings.musicloopmode = 0;
|
||||
bgMusic->SetLoop(Settings.musicloopmode);
|
||||
}
|
||||
|
||||
if (Settings.musicloopmode == ONCE)
|
||||
options2.SetValue(Idx, tr("Play Once"));
|
||||
else if(Settings.musicloopmode == LOOP)
|
||||
options2.SetValue(Idx, tr("Loop Music"));
|
||||
else if(Settings.musicloopmode == DIR_LOOP)
|
||||
options2.SetValue(Idx, tr("Loop Directory"));
|
||||
else if(Settings.musicloopmode == RANDOM_BGM)
|
||||
options2.SetValue(Idx, tr("Random Directory Music"));
|
||||
}
|
||||
if(ret == ++Idx || firstRun)
|
||||
{
|
||||
if(firstRun) options2.SetName(Idx, "%s",tr("Reset BG Music"));
|
||||
if(ret == Idx)
|
||||
{
|
||||
int result = WindowPrompt(tr("Reset to standard BGM?"), 0, tr("Yes"), tr("No"));
|
||||
if(result)
|
||||
{
|
||||
bgMusic->LoadStandard();
|
||||
bgMusic->Play();
|
||||
options2.SetValue(Idx, "%s", tr("Standard"));
|
||||
}
|
||||
}
|
||||
options2.SetValue(Idx,tr(" "));
|
||||
}
|
||||
|
||||
firstRun = false;
|
||||
}
|
||||
}
|
||||
@ -2148,10 +2186,9 @@ int MenuSettings()
|
||||
|
||||
// if partition has changed, Reinitialize it
|
||||
if (Settings.partition != settingspartitionold) {
|
||||
WBFS_Close();
|
||||
PartInfo pinfo = partitions.pinfo[Settings.partition];
|
||||
partitionEntry pentry = partitions.pentry[Settings.partition];
|
||||
WBFS_OpenPart(load_from_fs, pinfo.index, pentry.sector, pentry.size, (char *) &game_partition);
|
||||
WBFS_OpenPart(pinfo.part_fs, pinfo.index, pentry.sector, pentry.size, (char *) &game_partition);
|
||||
load_from_fs = pinfo.part_fs;
|
||||
}
|
||||
|
||||
|
@ -13,13 +13,11 @@
|
||||
#include "main.h"
|
||||
#include "fatmounter.h"
|
||||
#include "filelist.h"
|
||||
#include "prompts/filebrowser.h"
|
||||
#include "sys.h"
|
||||
#include "menu.h"
|
||||
|
||||
#include "menu/menus.h"
|
||||
|
||||
/*** Extern variables ***/
|
||||
extern GuiWindow * mainWindow;
|
||||
extern GuiSound * bgMusic;
|
||||
extern u8 shutdown;
|
||||
extern u8 reset;
|
||||
|
||||
@ -31,284 +29,58 @@ extern void HaltGui();
|
||||
/****************************************************************************
|
||||
* MenuOGG
|
||||
***************************************************************************/
|
||||
bool MenuOGG() {
|
||||
int cnt = 0;
|
||||
int ret = 0, choice = 0;
|
||||
int scrollon, nothingchanged = 0;
|
||||
bool returnhere = false;
|
||||
bool MenuBackgroundMusic()
|
||||
{
|
||||
bool ret = false;
|
||||
char entered[1024];
|
||||
int result = -1;
|
||||
snprintf(entered, sizeof(entered), "%s", Settings.ogg_path);
|
||||
|
||||
GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume);
|
||||
// because destroy GuiSound must wait while sound playing is finished, we use a global sound
|
||||
if(!btnClick2) btnClick2=new GuiSound(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
// GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume);
|
||||
|
||||
char imgPath[100];
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", CFG.theme_path);
|
||||
GuiImageData btnOutline(imgPath, button_dialogue_box_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%ssettings_background.png", CFG.theme_path);
|
||||
GuiImageData settingsbg(imgPath, settings_background_png);
|
||||
|
||||
GuiTrigger trigA;
|
||||
trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
|
||||
GuiTrigger trigB;
|
||||
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
|
||||
GuiTrigger trigMinus;
|
||||
trigMinus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0);
|
||||
GuiTrigger trigPlus;
|
||||
trigPlus.SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0);
|
||||
|
||||
char fullpath[150];
|
||||
char shortpath[35];
|
||||
int countoggs = GetAllDirFiles(Settings.oggload_path);
|
||||
|
||||
if (!strcmp("", Settings.oggload_path)) {
|
||||
sprintf(shortpath, "%s", tr("Standard"));
|
||||
} else {
|
||||
sprintf(shortpath, "%s", Settings.oggload_path);
|
||||
if(strcmp(entered, "") == 0)
|
||||
{
|
||||
sprintf(entered, "%s", bootDevice);
|
||||
}
|
||||
else
|
||||
{
|
||||
char * pathptr = strrchr(entered, '/');
|
||||
if(pathptr)
|
||||
{
|
||||
pathptr++;
|
||||
int choice = WindowPrompt(tr("Playing Music:"), pathptr, tr("Play Previous"), tr("Play Next"), tr("Change Play Path"), tr("Cancel"));
|
||||
if(choice == 1)
|
||||
{
|
||||
return bgMusic->PlayPrevious();
|
||||
}
|
||||
else if(choice == 2)
|
||||
{
|
||||
return bgMusic->PlayNext();
|
||||
}
|
||||
else if(choice == 3)
|
||||
{
|
||||
pathptr[0] = 0;
|
||||
}
|
||||
else
|
||||
return true;
|
||||
}
|
||||
else
|
||||
sprintf(entered, "%s", bootDevice);
|
||||
}
|
||||
|
||||
GuiText titleTxt(shortpath, 24, (GXColor) {0, 0, 0, 255});
|
||||
titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE);
|
||||
titleTxt.SetPosition(0,0);
|
||||
GuiButton pathBtn(300, 50);
|
||||
pathBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
pathBtn.SetPosition(0,28);
|
||||
pathBtn.SetLabel(&titleTxt);
|
||||
pathBtn.SetSoundOver(&btnSoundOver);
|
||||
pathBtn.SetSoundClick(btnClick2);
|
||||
pathBtn.SetTrigger(&trigA);
|
||||
pathBtn.SetEffectGrow();
|
||||
result = BrowseDevice(entered, sizeof(entered), FB_DEFAULT);
|
||||
|
||||
GuiImage oggmenubackground(&settingsbg);
|
||||
oggmenubackground.SetAlignment(ALIGN_LEFT, ALIGN_TOP);
|
||||
oggmenubackground.SetPosition(0, 0);
|
||||
|
||||
GuiText backBtnTxt(tr("Back") , 22, THEME.prompttext);
|
||||
backBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
|
||||
GuiImage backBtnImg(&btnOutline);
|
||||
if (Settings.wsprompt == yes) {
|
||||
backBtnTxt.SetWidescreen(CFG.widescreen);
|
||||
backBtnImg.SetWidescreen(CFG.widescreen);
|
||||
}
|
||||
GuiButton backBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
|
||||
backBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
backBtn.SetPosition(-180, 400);
|
||||
backBtn.SetLabel(&backBtnTxt);
|
||||
backBtn.SetImage(&backBtnImg);
|
||||
backBtn.SetSoundOver(&btnSoundOver);
|
||||
backBtn.SetSoundClick(btnClick2);
|
||||
backBtn.SetTrigger(&trigA);
|
||||
backBtn.SetTrigger(&trigB);
|
||||
backBtn.SetEffectGrow();
|
||||
|
||||
GuiText defaultBtnTxt(tr("Default") , 22, THEME.prompttext);
|
||||
defaultBtnTxt.SetMaxWidth(btnOutline.GetWidth()-30);
|
||||
GuiImage defaultBtnImg(&btnOutline);
|
||||
if (Settings.wsprompt == yes) {
|
||||
defaultBtnTxt.SetWidescreen(CFG.widescreen);
|
||||
defaultBtnImg.SetWidescreen(CFG.widescreen);
|
||||
}
|
||||
GuiButton defaultBtn(btnOutline.GetWidth(), btnOutline.GetHeight());
|
||||
defaultBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
defaultBtn.SetPosition(180, 400);
|
||||
defaultBtn.SetLabel(&defaultBtnTxt);
|
||||
defaultBtn.SetImage(&defaultBtnImg);
|
||||
defaultBtn.SetSoundOver(&btnSoundOver);
|
||||
defaultBtn.SetSoundClick(btnClick2);
|
||||
defaultBtn.SetTrigger(&trigA);
|
||||
defaultBtn.SetEffectGrow();
|
||||
|
||||
customOptionList options2(countoggs);
|
||||
|
||||
for (cnt = 0; cnt < countoggs; cnt++) {
|
||||
options2.SetValue(cnt, "%s", GetFileName(cnt));
|
||||
options2.SetName(cnt,"%i.", cnt+1);
|
||||
if(result)
|
||||
{
|
||||
if (!bgMusic->Load(entered))
|
||||
{
|
||||
WindowPrompt(tr("Not supported format!"), tr("Loading standard music."), tr("OK"));
|
||||
}
|
||||
else
|
||||
ret = true;
|
||||
bgMusic->Play();
|
||||
bgMusic->SetVolume(Settings.volume);
|
||||
}
|
||||
|
||||
if (cnt < 9) {
|
||||
scrollon = 0;
|
||||
} else {
|
||||
scrollon = 1;
|
||||
}
|
||||
|
||||
GuiCustomOptionBrowser optionBrowser4(396, 280, &options2, CFG.theme_path, "bg_options_settings.png", bg_options_settings_png, scrollon, 10);
|
||||
optionBrowser4.SetPosition(0, 90);
|
||||
optionBrowser4.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
|
||||
snprintf(imgPath, sizeof(imgPath), "%smp3_stop.png", CFG.theme_path);
|
||||
GuiImageData stop(imgPath, mp3_stop_png);
|
||||
snprintf(imgPath, sizeof(imgPath), "%sstartgame_arrow_right.png", CFG.theme_path);
|
||||
GuiImageData play(imgPath, startgame_arrow_right_png);
|
||||
|
||||
GuiImage playBtnImg(&play);
|
||||
playBtnImg.SetWidescreen(CFG.widescreen);
|
||||
GuiButton playBtn(play.GetWidth(), play.GetHeight());
|
||||
playBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
playBtn.SetPosition(50, 400);
|
||||
playBtn.SetImage(&playBtnImg);
|
||||
playBtn.SetSoundOver(&btnSoundOver);
|
||||
playBtn.SetSoundClick(btnClick2);
|
||||
playBtn.SetTrigger(&trigA);
|
||||
playBtn.SetTrigger(&trigPlus);
|
||||
playBtn.SetEffectGrow();
|
||||
|
||||
GuiImage stopBtnImg(&stop);
|
||||
stopBtnImg.SetWidescreen(CFG.widescreen);
|
||||
GuiButton stopBtn(stop.GetWidth(), stop.GetHeight());
|
||||
stopBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP);
|
||||
stopBtn.SetPosition(-15, 400);
|
||||
stopBtn.SetImage(&stopBtnImg);
|
||||
stopBtn.SetSoundOver(&btnSoundOver);
|
||||
stopBtn.SetSoundClick(btnClick2);
|
||||
stopBtn.SetTrigger(&trigA);
|
||||
stopBtn.SetTrigger(&trigMinus);
|
||||
stopBtn.SetEffectGrow();
|
||||
|
||||
HaltGui();
|
||||
GuiWindow w(screenwidth, screenheight);
|
||||
w.Append(&oggmenubackground);
|
||||
w.Append(&pathBtn);
|
||||
w.Append(&backBtn);
|
||||
w.Append(&playBtn);
|
||||
w.Append(&stopBtn);
|
||||
w.Append(&defaultBtn);
|
||||
w.Append(&optionBrowser4);
|
||||
mainWindow->Append(&w);
|
||||
|
||||
w.SetEffect(EFFECT_FADE, 20);
|
||||
ResumeGui();
|
||||
|
||||
while (w.GetEffect()>0) usleep(50);
|
||||
|
||||
while (!returnhere) {
|
||||
|
||||
if (shutdown == 1)
|
||||
Sys_Shutdown();
|
||||
if (reset == 1)
|
||||
Sys_Reboot();
|
||||
|
||||
if (backBtn.GetState() == STATE_CLICKED) {
|
||||
if (nothingchanged == 1 && countoggs > 0) {
|
||||
if (strcmp("", Settings.oggload_path) && strcmp("notset", Settings.ogg_path)) {
|
||||
bgMusic->Load(Settings.ogg_path);
|
||||
} else {
|
||||
bgMusic->Load(bg_music_ogg, bg_music_ogg_size, true);
|
||||
}
|
||||
bgMusic->Play();
|
||||
}
|
||||
backBtn.ResetState();
|
||||
break;
|
||||
}
|
||||
|
||||
if (defaultBtn.GetState() == STATE_CLICKED) {
|
||||
choice = WindowPrompt(tr("Loading standard music."),0,tr("OK"), tr("Cancel"));
|
||||
if (choice == 1) {
|
||||
sprintf(Settings.ogg_path, "notset");
|
||||
bgMusic->Load(bg_music_ogg, bg_music_ogg_size, true);
|
||||
bgMusic->Play();
|
||||
bgMusic->SetVolume(Settings.volume);
|
||||
cfg_save_global();
|
||||
}
|
||||
defaultBtn.ResetState();
|
||||
if (countoggs > 0)
|
||||
optionBrowser4.SetFocus(1);
|
||||
}
|
||||
|
||||
if (pathBtn.GetState() == STATE_CLICKED) {
|
||||
w.Remove(&optionBrowser4);
|
||||
w.Remove(&backBtn);
|
||||
w.Remove(&pathBtn);
|
||||
w.Remove(&playBtn);
|
||||
w.Remove(&stopBtn);
|
||||
w.Remove(&defaultBtn);
|
||||
char entered[43] = "";
|
||||
strlcpy(entered, Settings.oggload_path, sizeof(entered));
|
||||
int result = OnScreenKeyboard(entered,43,0);
|
||||
w.Append(&optionBrowser4);
|
||||
w.Append(&pathBtn);
|
||||
w.Append(&backBtn);
|
||||
w.Append(&playBtn);
|
||||
w.Append(&stopBtn);
|
||||
w.Append(&defaultBtn);
|
||||
if ( result == 1 ) {
|
||||
int len = (strlen(entered)-1);
|
||||
if (entered[len] !='/')
|
||||
strncat (entered, "/", 1);
|
||||
strlcpy(Settings.oggload_path, entered, sizeof(Settings.oggload_path));
|
||||
WindowPrompt(tr("Backgroundmusic Path changed."),0,tr("OK"));
|
||||
if (isInserted(bootDevice)) {
|
||||
if (!strcmp("", Settings.oggload_path)) {
|
||||
sprintf(Settings.ogg_path, "notset");
|
||||
bgMusic->Play();
|
||||
}
|
||||
cfg_save_global();
|
||||
returnhere = true;
|
||||
break;
|
||||
} else {
|
||||
WindowPrompt(tr("No SD-Card inserted!"), tr("Insert an SD-Card to save."), tr("OK"));
|
||||
}
|
||||
}
|
||||
if (countoggs > 0) {
|
||||
optionBrowser4.SetFocus(1);
|
||||
}
|
||||
pathBtn.ResetState();
|
||||
}
|
||||
|
||||
ret = optionBrowser4.GetClickedOption();
|
||||
|
||||
if (ret>=0) {
|
||||
choice = WindowPrompt(tr("Set as backgroundmusic?"),GetFileName(ret),tr("Yes"),tr("No"));
|
||||
if (choice == 1) {
|
||||
snprintf(fullpath,150,"%s%s",Settings.oggload_path,GetFileName(ret));
|
||||
if (!bgMusic->Load(fullpath)) {
|
||||
WindowPrompt(tr("Not supported format!"), tr("Loading standard music."), tr("OK"));
|
||||
sprintf(Settings.ogg_path, "notset");
|
||||
} else {
|
||||
snprintf(Settings.ogg_path, sizeof(Settings.ogg_path), "%s", fullpath);
|
||||
cfg_save_global();
|
||||
bgMusic->SetVolume(Settings.volume);
|
||||
nothingchanged = 0;
|
||||
}
|
||||
bgMusic->Play();
|
||||
bgMusic->SetVolume(Settings.volume);
|
||||
}
|
||||
optionBrowser4.SetFocus(1);
|
||||
}
|
||||
|
||||
if (playBtn.GetState() == STATE_CLICKED && countoggs > 0) {
|
||||
if (countoggs > 0) {
|
||||
ret = optionBrowser4.GetSelectedOption();
|
||||
snprintf(fullpath, 150,"%s%s", Settings.oggload_path,GetFileName(ret));
|
||||
if (!bgMusic->Load(fullpath)) {
|
||||
WindowPrompt(tr("Not supported format!"), tr("Loading standard music."), tr("OK"));
|
||||
}
|
||||
bgMusic->Play();
|
||||
bgMusic->SetVolume(Settings.volume);
|
||||
nothingchanged = 1;
|
||||
optionBrowser4.SetFocus(1);
|
||||
}
|
||||
playBtn.ResetState();
|
||||
}
|
||||
|
||||
if (stopBtn.GetState() == STATE_CLICKED) {
|
||||
if (countoggs > 0) {
|
||||
bgMusic->Stop();
|
||||
nothingchanged = 1;
|
||||
optionBrowser4.SetFocus(1);
|
||||
}
|
||||
stopBtn.ResetState();
|
||||
}
|
||||
}
|
||||
|
||||
w.SetEffect(EFFECT_FADE, -20);
|
||||
while (w.GetEffect()>0) usleep(50);
|
||||
|
||||
HaltGui();
|
||||
mainWindow->Remove(&w);
|
||||
ResumeGui();
|
||||
|
||||
return returnhere;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -8,7 +8,7 @@
|
||||
#ifndef _SETTINGSPROMPTS_H_
|
||||
#define _SETTINGSPROMPTS_H_
|
||||
|
||||
bool MenuOGG();
|
||||
bool MenuBackgroundMusic();
|
||||
int MenuLanguageSelect();
|
||||
|
||||
#endif
|
||||
|
@ -201,8 +201,7 @@ void CFG_Default(int widescreen) { // -1 = non forced Mode
|
||||
snprintf(Settings.BcaCodepath, sizeof(Settings.BcaCodepath), "%s/bca/", bootDevice);
|
||||
snprintf(Settings.WipCodepath, sizeof(Settings.WipCodepath), "%s/wip/", bootDevice);
|
||||
snprintf(Settings.dolpath, sizeof(Settings.dolpath), "%s/", bootDevice);
|
||||
snprintf(Settings.oggload_path, sizeof(Settings.oggload_path), "%s/config/backgroundmusic/", bootDevice);
|
||||
sprintf(Settings.ogg_path, "notset");
|
||||
strcpy(Settings.ogg_path, "");
|
||||
}
|
||||
//always set Theme defaults
|
||||
//all alignments are left top here
|
||||
@ -358,6 +357,7 @@ void Global_Default(void) {
|
||||
snprintf(Settings.db_language, sizeof(Settings.db_language), empty);
|
||||
Settings.db_JPtoEN = 0;
|
||||
Settings.screensaver = 3;
|
||||
Settings.musicloopmode = 1;
|
||||
Settings.partition = -1;
|
||||
Settings.marknewtitles = 1;
|
||||
Settings.FatInstallToDir = 0;
|
||||
@ -579,10 +579,6 @@ void path_set(char *name, char *val) {
|
||||
strlcpy(Settings.dolpath, val, sizeof(Settings.dolpath));
|
||||
return;
|
||||
}
|
||||
if (strcmp(name, "oggload_path") == 0) {
|
||||
strlcpy(Settings.oggload_path, val, sizeof(Settings.oggload_path));
|
||||
return;
|
||||
}
|
||||
if (strcmp(name, "ogg_path") == 0) {
|
||||
strlcpy(Settings.ogg_path, val, sizeof(Settings.ogg_path));
|
||||
return;
|
||||
@ -1111,6 +1107,12 @@ void global_cfg_set(char *name, char *val) {
|
||||
Settings.screensaver = i;
|
||||
}
|
||||
return;
|
||||
} else if (strcmp(name, "musicloopmode") == 0) {
|
||||
int i;
|
||||
if (sscanf(val, "%d", &i) == 1) {
|
||||
Settings.musicloopmode = i;
|
||||
}
|
||||
return;
|
||||
} else if (strcmp(name, "partition") == 0) {
|
||||
int i;
|
||||
if (sscanf(val, "%d", &i) == 1) {
|
||||
@ -1364,7 +1366,6 @@ bool cfg_save_global() { // save global settings
|
||||
fprintf(f, "titlestxt_path = %s\n ", Settings.titlestxt_path);
|
||||
fprintf(f, "gamesound = %d\n ", Settings.gamesound);
|
||||
fprintf(f, "dolpath = %s\n ", Settings.dolpath);
|
||||
fprintf(f, "oggload_path = %s\n ", Settings.oggload_path);
|
||||
fprintf(f, "ogg_path = %s\n ", Settings.ogg_path);
|
||||
fprintf(f, "wiilight = %d\n ", Settings.wiilight);
|
||||
fprintf(f, "gameDisplay = %d\n ", Settings.gameDisplay);
|
||||
@ -1380,6 +1381,7 @@ bool cfg_save_global() { // save global settings
|
||||
//fprintf(f, "db_language = %d\n ", Settings.language);
|
||||
fprintf(f, "patchcountrystrings = %d\n ", Settings.patchcountrystrings);
|
||||
fprintf(f, "screensaver = %d\n ", Settings.screensaver);
|
||||
fprintf(f, "musicloopmode = %d\n ", Settings.musicloopmode);
|
||||
fprintf(f, "error002 = %d\n ", Settings.error002);
|
||||
fprintf(f, "autonetwork = %d\n ", Settings.autonetwork);
|
||||
fprintf(f, "discart = %d\n ", Settings.discart);
|
||||
@ -1890,6 +1892,7 @@ void CFG_Cleanup(void)
|
||||
free(cfg_title);
|
||||
cfg_title = NULL;
|
||||
}
|
||||
num_title = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -419,7 +419,8 @@ extern "C" {
|
||||
u8 gameDisplay;
|
||||
u8 patchcountrystrings;
|
||||
u8 screensaver;
|
||||
s8 partition;
|
||||
u8 partition;
|
||||
u8 musicloopmode;
|
||||
short godmode;
|
||||
char covers_path[100];
|
||||
char covers2d_path[100];
|
||||
@ -430,8 +431,7 @@ extern "C" {
|
||||
char titlestxt_path[100];
|
||||
char language_path[100];
|
||||
char languagefiles_path[100];
|
||||
char oggload_path[100];
|
||||
char ogg_path[150];
|
||||
char ogg_path[250];
|
||||
char dolpath[150];
|
||||
char update_path[150];
|
||||
char homebrewapps_path[150];
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include "usbloader/disc.h"
|
||||
#include "usbloader/wbfs.h"
|
||||
#include "usbloader/partition_usbloader.h"
|
||||
#include "mload/mload.h"
|
||||
#include "mload/mload_modules.h"
|
||||
#include "video.h"
|
||||
#include "audio.h"
|
||||
#include "menu.h"
|
||||
@ -232,14 +232,14 @@ s32 IOS_ReloadIOSsafe(int ios)
|
||||
if (ios222rev == -69)
|
||||
ios222rev = getIOSrev(0x00000001000000dell);
|
||||
|
||||
if (ios222rev >= 0 && (ios222rev != 4 && ios222rev != 5))return -2;
|
||||
if (ios222rev > 0 && (ios222rev != 4 && ios222rev != 5))return -2;
|
||||
}
|
||||
else if (ios==223)
|
||||
{
|
||||
if (ios223rev == -69)
|
||||
ios223rev = getIOSrev(0x00000001000000dfll);
|
||||
|
||||
if (ios223rev >= 0 && (ios223rev != 4 && ios223rev != 5))return -2;
|
||||
if (ios223rev > 0 && (ios223rev != 4 && ios223rev != 5))return -2;
|
||||
}
|
||||
else if (ios==249)
|
||||
{
|
||||
|
@ -408,7 +408,7 @@ s32 Apploader_Run(entry_point *entry, u8 cheat, u8 videoSelected, u8 vipatch, u8
|
||||
hooktype = 1;
|
||||
memcpy((void*)0x80001800, (char*)0x80000000, 6); // For WiiRD
|
||||
/*HOOKS STUFF - FISHEARS*/
|
||||
printf("\n\tcode handler loaded");
|
||||
gprintf("\n\tcode handler loaded");
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
|
@ -8,13 +8,10 @@
|
||||
#include "libntfs/ntfs.h"
|
||||
#include "libwbfs/libwbfs.h"
|
||||
#include "wbfs.h"
|
||||
#include "wbfs_fat.h"
|
||||
#include "usbstorage.h"
|
||||
#include "frag.h"
|
||||
#include "utils.h"
|
||||
|
||||
int _FAT_get_fragments (const char *path, _frag_append_t append_fragment, void *callback_data);
|
||||
|
||||
FragList *frag_list = NULL;
|
||||
|
||||
void frag_init(FragList *ff, int maxnum)
|
||||
@ -148,98 +145,7 @@ int frag_remap(FragList *ff, FragList *log, FragList *phy)
|
||||
|
||||
int get_frag_list(u8 *id)
|
||||
{
|
||||
char fname[1024];
|
||||
char fname1[1024];
|
||||
struct stat st;
|
||||
FragList *fs = NULL;
|
||||
FragList *fa = NULL;
|
||||
FragList *fw = NULL;
|
||||
int ret;
|
||||
int i, j;
|
||||
int is_wbfs = 0;
|
||||
int ret_val = -1;
|
||||
|
||||
if (wbfs_part_fs == PART_FS_WBFS) return 0;
|
||||
|
||||
ret = WBFS_FAT_find_fname(id, fname, sizeof(fname));
|
||||
if (!ret) return -1;
|
||||
|
||||
if (strcasecmp(strrchr(fname,'.'), ".wbfs") == 0) {
|
||||
is_wbfs = 1;
|
||||
}
|
||||
|
||||
fs = malloc(sizeof(FragList));
|
||||
fa = malloc(sizeof(FragList));
|
||||
fw = malloc(sizeof(FragList));
|
||||
|
||||
frag_init(fa, MAX_FRAG);
|
||||
|
||||
for (i=0; i<10; i++) {
|
||||
frag_init(fs, MAX_FRAG);
|
||||
if (i > 0) {
|
||||
fname[strlen(fname)-1] = '0' + i;
|
||||
if (stat(fname, &st) == -1) break;
|
||||
}
|
||||
strcpy(fname1, fname);
|
||||
//printf("::*%s\n", strrchr(fname,'/'));
|
||||
if (wbfs_part_fs == PART_FS_FAT) {
|
||||
ret = _FAT_get_fragments(fname, &_frag_append, fs);
|
||||
if (ret) {
|
||||
printf("fat getf: %d\n", ret);
|
||||
// don't return failure, let it fallback to old method
|
||||
//ret_val = ret;
|
||||
ret_val = 0;
|
||||
goto out;
|
||||
}
|
||||
} else if (wbfs_part_fs == PART_FS_NTFS) {
|
||||
ret = _NTFS_get_fragments(fname, &_frag_append, fs);
|
||||
if (ret) {
|
||||
printf("ntfs getf: %d\n", ret);
|
||||
if (ret == -50 || ret == -500) {
|
||||
printf("Too many fragments! %d\n", fs->num);
|
||||
}
|
||||
ret_val = ret;
|
||||
goto out;
|
||||
}
|
||||
// offset to start of partition
|
||||
for (j=0; j<fs->num; j++) {
|
||||
fs->frag[j].sector += fs_ntfs_sec;
|
||||
}
|
||||
}
|
||||
frag_concat(fa, fs);
|
||||
}
|
||||
|
||||
frag_list = malloc(sizeof(FragList));
|
||||
frag_init(frag_list, MAX_FRAG);
|
||||
if (is_wbfs) {
|
||||
// if wbfs file format, remap.
|
||||
//printf("=====\n");
|
||||
wbfs_disc_t *d = WBFS_OpenDisc(id);
|
||||
if (!d) goto out;
|
||||
frag_init(fw, MAX_FRAG);
|
||||
ret = wbfs_get_fragments(d, &_frag_append, fw);
|
||||
if (ret) goto out;
|
||||
WBFS_CloseDisc(d);
|
||||
// DEBUG: frag_list->num = MAX_FRAG-10; // stress test
|
||||
ret = frag_remap(frag_list, fw, fa);
|
||||
if (ret) goto out;
|
||||
} else {
|
||||
// .iso does not need remap just copy
|
||||
//printf("fa:\n");
|
||||
memcpy(frag_list, fa, sizeof(FragList));
|
||||
}
|
||||
|
||||
ret_val = 0;
|
||||
|
||||
out:
|
||||
if (ret_val) {
|
||||
// error
|
||||
SAFE_FREE(frag_list);
|
||||
}
|
||||
SAFE_FREE(fs);
|
||||
SAFE_FREE(fa);
|
||||
SAFE_FREE(fw);
|
||||
return ret_val;
|
||||
return WBFS_GetFragList(id);
|
||||
}
|
||||
|
||||
int set_frag_list(u8 *id)
|
||||
@ -248,7 +154,7 @@ int set_frag_list(u8 *id)
|
||||
if (frag_list == NULL) {
|
||||
if (wbfs_part_fs == PART_FS_FAT) {
|
||||
// fall back to old fat method
|
||||
printf("FAT: fallback to old method\n");
|
||||
// printf("FAT: fallback to old method\n");
|
||||
return 0;
|
||||
}
|
||||
// ntfs has no fallback, return error
|
||||
@ -259,7 +165,7 @@ int set_frag_list(u8 *id)
|
||||
int size = sizeof(Fragment) * (frag_list->num + 1);
|
||||
int ret = USBStorage_WBFS_SetFragList(frag_list, size);
|
||||
if (ret) {
|
||||
printf("set_frag: %d\n", ret);
|
||||
// printf("set_frag: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "settings/newtitles.h"
|
||||
|
||||
#include "../prompts/TitleBrowser.h"
|
||||
#include "prompts/PromptWindows.h"
|
||||
|
||||
#include "wad/wad.h"
|
||||
#include "xml/xml.h"
|
||||
@ -16,6 +17,8 @@
|
||||
#include <vector>
|
||||
#include <wchar.h>
|
||||
|
||||
#include "gecko.h"
|
||||
|
||||
#include "listfiles.h"
|
||||
#define typei 0x00010001
|
||||
|
||||
@ -27,6 +30,9 @@ wchar_t *gameFilter=NULL;
|
||||
wchar_t *gameFilterNextList=NULL;
|
||||
wchar_t *gameFilterPrev=NULL;
|
||||
|
||||
struct discHdr * fullGameList = NULL;
|
||||
s32 fullGameCnt = -1;
|
||||
|
||||
extern u8 mountMethod;
|
||||
|
||||
/****************************************************************************
|
||||
@ -59,19 +65,12 @@ static inline int wcsnicmp(const wchar_t *s1, const wchar_t *s2, int len)
|
||||
* EntryCmp
|
||||
***************************************************************************/
|
||||
s32 __Menu_EntryCmp(const void *a, const void *b)
|
||||
|
||||
{
|
||||
|
||||
struct discHdr *hdr1 = (struct discHdr *)a;
|
||||
|
||||
struct discHdr *hdr2 = (struct discHdr *)b;
|
||||
|
||||
|
||||
|
||||
/* Compare strings */
|
||||
|
||||
return stricmp(get_title(hdr1), get_title(hdr2));
|
||||
|
||||
}
|
||||
|
||||
s32 __Menu_EntryCmpCount(const void *a, const void *b) {
|
||||
@ -87,8 +86,6 @@ s32 __Menu_EntryCmpCount(const void *a, const void *b) {
|
||||
struct Game_NUM* game_num1 = CFG_get_game_num(hdr1->id);
|
||||
struct Game_NUM* game_num2 = CFG_get_game_num(hdr2->id);
|
||||
|
||||
|
||||
|
||||
if (game_num1) count1 = game_num1->count;
|
||||
if (game_num2) count2 = game_num2->count;
|
||||
|
||||
@ -119,52 +116,86 @@ s32 __Menu_EntryCmpFavorite(const void *a, const void *b) {
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ResetGamelist()
|
||||
{
|
||||
if (fullGameList != NULL)
|
||||
{
|
||||
fullGameCnt = -1;
|
||||
free(fullGameList);
|
||||
fullGameList = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int GetFullHeaders(struct discHdr **headers, u32 *count)
|
||||
{
|
||||
if (fullGameList == NULL || fullGameCnt == -1)
|
||||
{
|
||||
gprintf("Retrieving gamelist from WBFS\n");
|
||||
|
||||
// Retrieve all stuff from WBFS
|
||||
u32 cnt;
|
||||
|
||||
int ret = WBFS_GetCount(&cnt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Buffer length */
|
||||
u32 len = sizeof(struct discHdr) * cnt;
|
||||
|
||||
/* Allocate memory */
|
||||
struct discHdr *buffer = (struct discHdr *)memalign(32, len);
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
/* Clear buffer */
|
||||
memset(buffer, 0, len);
|
||||
|
||||
/* Get header list */
|
||||
ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr));
|
||||
if (ret < 0) {
|
||||
if (buffer) free(buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
fullGameList = buffer;
|
||||
fullGameCnt = cnt;
|
||||
}
|
||||
else
|
||||
gprintf("Retrieving gamelist from cache\n");
|
||||
|
||||
*count = fullGameCnt;
|
||||
if (headers != NULL)
|
||||
{
|
||||
*headers = fullGameList;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Get PrevFilter
|
||||
***************************************************************************/
|
||||
|
||||
int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t **PgameFilterPrev)
|
||||
{
|
||||
|
||||
std::vector<wchar_t *> nameList;
|
||||
|
||||
struct discHdr *buffer = NULL;
|
||||
struct discHdr *buffer = NULL; // DO NOT FREE THIS BUFFER, IT'S A REFERENCE
|
||||
u32 cnt, len, i;
|
||||
s32 ret;
|
||||
|
||||
wchar_t *new_gameFilterPrev = wcsdup_new(gameFilter);
|
||||
|
||||
|
||||
/* Get list length */
|
||||
ret = WBFS_GetCount(&cnt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Buffer length */
|
||||
len = sizeof(struct discHdr) * cnt;
|
||||
|
||||
/* Allocate memory */
|
||||
buffer = (struct discHdr *)memalign(32, len);
|
||||
if (!buffer)
|
||||
if (GetFullHeaders(&buffer, &cnt))
|
||||
{
|
||||
return -1;
|
||||
|
||||
/* Clear buffer */
|
||||
memset(buffer, 0, len);
|
||||
|
||||
/* Get header list */
|
||||
ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr));
|
||||
if (ret < 0) {
|
||||
if (buffer) free(buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Fill nameList */
|
||||
for (i = 0; i < cnt; i++)
|
||||
{
|
||||
struct discHdr *header = &buffer[i];
|
||||
|
||||
/* Register game */
|
||||
NewTitles::Instance()->CheckGame(header->id);
|
||||
|
||||
/* Filter Favorite */
|
||||
if (Settings.fave && t==0)
|
||||
{
|
||||
@ -194,11 +225,6 @@ int __Menu_GetPrevFilter(int t, wchar_t* gameFilter, u32 gameFiltered, wchar_t *
|
||||
if(wname) nameList.push_back(wname);
|
||||
}
|
||||
|
||||
NewTitles::Instance()->Save();
|
||||
|
||||
/* delete buffer */
|
||||
if(buffer) free(buffer);
|
||||
|
||||
/* Find Prev-Filter */
|
||||
len = wcslen(new_gameFilterPrev);
|
||||
while(len)
|
||||
@ -455,38 +481,23 @@ int buildTitleList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameC
|
||||
}
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Get Gamelist
|
||||
***************************************************************************/
|
||||
int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *PgameCnt) {
|
||||
struct discHdr *buffer = NULL;
|
||||
struct discHdr *output = NULL;
|
||||
|
||||
u32 cnt, cnt2=0, len;
|
||||
s32 ret;
|
||||
u32 cnt, cnt2=0;
|
||||
|
||||
/* Get list length */
|
||||
ret = WBFS_GetCount(&cnt);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (GetFullHeaders(&buffer, &cnt))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Buffer length */
|
||||
len = sizeof(struct discHdr) * cnt;
|
||||
|
||||
/* Allocate memory */
|
||||
buffer = (struct discHdr *)memalign(32, len);
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
/* Clear buffer */
|
||||
memset(buffer, 0, len);
|
||||
|
||||
/* Get header list */
|
||||
ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr));
|
||||
if (ret < 0) {
|
||||
if (buffer) free(buffer);
|
||||
return ret;
|
||||
}
|
||||
int len = cnt * sizeof(struct discHdr);
|
||||
output = (struct discHdr *) memalign(32, len);
|
||||
memset(output, 0, len);
|
||||
|
||||
for (u32 i = 0; i < cnt; i++) {
|
||||
struct discHdr *header = &buffer[i];
|
||||
@ -501,11 +512,11 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg
|
||||
continue;
|
||||
}
|
||||
|
||||
//ignore uLoader cfg "iso". i was told it is "__CFG_" but not confirmed
|
||||
if (header->id[0]=='_'&&header->id[1]=='_'&&
|
||||
header->id[2]=='C'&&header->id[3]=='F'&&
|
||||
header->id[4]=='G'&&header->id[5]=='_')
|
||||
continue;
|
||||
//ignore uLoader cfg "iso". i was told it is "__CFG_" but not confirmed
|
||||
if (header->id[0]=='_'&&header->id[1]=='_'&&
|
||||
header->id[2]=='C'&&header->id[3]=='F'&&
|
||||
header->id[4]=='G'&&header->id[5]=='_')
|
||||
continue;
|
||||
|
||||
if (Settings.parentalcontrol && !Settings.godmode && t==0) {
|
||||
if (get_block(header) >= Settings.parentalcontrol)
|
||||
@ -532,8 +543,7 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(i != cnt2)
|
||||
buffer[cnt2] = buffer[i];
|
||||
output[cnt2] = buffer[i];
|
||||
cnt2++;
|
||||
}
|
||||
NewTitles::Instance()->Save();
|
||||
@ -541,21 +551,23 @@ int __Menu_GetGameList(int t, wchar_t* gameFilter, discHdr ** PgameList, u32 *Pg
|
||||
if(cnt > cnt2)
|
||||
{
|
||||
cnt = cnt2;
|
||||
buffer = (struct discHdr *)realloc(buffer, sizeof(struct discHdr) * cnt);
|
||||
output = (struct discHdr *)realloc(output, sizeof(struct discHdr) * cnt);
|
||||
}
|
||||
if (!buffer)
|
||||
if (!output)
|
||||
return -1;
|
||||
|
||||
gprintf("After retrieval, gamecount: %d\n", cnt);
|
||||
|
||||
if (Settings.sort==pcount) {
|
||||
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount);
|
||||
qsort(output, cnt, sizeof(struct discHdr), __Menu_EntryCmpCount);
|
||||
} else if (Settings.fave) {
|
||||
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmpFavorite);
|
||||
qsort(output, cnt, sizeof(struct discHdr), __Menu_EntryCmpFavorite);
|
||||
} else {
|
||||
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmp);
|
||||
qsort(output, cnt, sizeof(struct discHdr), __Menu_EntryCmp);
|
||||
}
|
||||
|
||||
/* Set values */
|
||||
if(PgameList) *PgameList = buffer; else free(buffer);
|
||||
if(PgameList) *PgameList = output; else free(output);
|
||||
if(PgameCnt) *PgameCnt = cnt;
|
||||
|
||||
return 0;
|
||||
|
@ -29,5 +29,6 @@ extern wchar_t *gameFilterPrev;
|
||||
int __Menu_GetEntries(int t=0, const wchar_t* Filter=NULL);
|
||||
s32 __Menu_EntryCmpCount(const void *a, const void *b);
|
||||
s32 __Menu_EntryCmp(const void *a, const void *b);
|
||||
void ResetGamelist();
|
||||
|
||||
#endif
|
||||
|
@ -117,7 +117,7 @@ bool Device_WriteSectors(u32 device, u32 sector, u32 count, void *buffer)
|
||||
return false;
|
||||
}
|
||||
|
||||
s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *psect_size, int *num)
|
||||
s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *psect_size, u8 *num)
|
||||
{
|
||||
static partitionTable table ATTRIBUTE_ALIGN(32);
|
||||
partitionEntry *entry;
|
||||
@ -260,7 +260,7 @@ int get_fs_type(void *buff)
|
||||
{
|
||||
char *buf = buff;
|
||||
// WBFS
|
||||
wbfs_head_t *head = (wbfs_head_t *)buf;
|
||||
wbfs_head_t *head = (wbfs_head_t *)buff;
|
||||
if (head->magic == wbfs_htonl(WBFS_MAGIC)) return FS_TYPE_WBFS;
|
||||
// 55AA
|
||||
if (buf[0x1FE] == 0x55 && buf[0x1FF] == 0xAA) {
|
||||
@ -354,12 +354,12 @@ s32 Partition_GetList(u32 device, PartList *plist)
|
||||
}
|
||||
|
||||
|
||||
int Partition_FixEXT(u32 device, int part)
|
||||
int Partition_FixEXT(u32 device, u8 part)
|
||||
{
|
||||
static partitionTable table ATTRIBUTE_ALIGN(32);
|
||||
int ret;
|
||||
|
||||
if (part < 0 || part > 3) return -1;
|
||||
if (part > 3) return -1;
|
||||
// Read partition table
|
||||
ret = Device_ReadSectors(device, 0, 1, &table);
|
||||
if (!ret) return -1;
|
||||
|
@ -38,32 +38,32 @@ typedef struct {
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int fs_type;
|
||||
int part_fs;
|
||||
int wbfs_i; // seq wbfs part index
|
||||
int fat_i; // seq fat part index
|
||||
int ntfs_i; // seq ntfs part index
|
||||
int index;
|
||||
u8 fs_type;
|
||||
u8 part_fs;
|
||||
u8 wbfs_i; // seq wbfs part index
|
||||
u8 fat_i; // seq fat part index
|
||||
u8 ntfs_i; // seq ntfs part index
|
||||
u8 index;
|
||||
} PartInfo;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int num;
|
||||
u8 num;
|
||||
u32 sector_size;
|
||||
partitionEntry pentry[MAX_PARTITIONS_EX];
|
||||
int wbfs_n;
|
||||
int fat_n;
|
||||
int ntfs_n;
|
||||
u8 wbfs_n;
|
||||
u8 fat_n;
|
||||
u8 ntfs_n;
|
||||
PartInfo pinfo[MAX_PARTITIONS_EX];
|
||||
} PartList;
|
||||
|
||||
/* Prototypes */
|
||||
s32 Partition_GetEntries(u32 device, partitionEntry *outbuf, u32 *outval);
|
||||
s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *outval, int *num);
|
||||
s32 Partition_GetEntriesEx(u32 device, partitionEntry *outbuf, u32 *outval, u8 *num);
|
||||
bool Device_ReadSectors(u32 device, u32 sector, u32 count, void *buffer);
|
||||
bool Device_WriteSectors(u32 device, u32 sector, u32 count, void *buffer);
|
||||
s32 Partition_GetList(u32 device, PartList *plist);
|
||||
int Partition_FixEXT(u32 device, int part);
|
||||
int Partition_FixEXT(u32 device, u8 part);
|
||||
|
||||
bool part_is_extended(int type);
|
||||
bool part_is_data(int type);
|
||||
|
@ -155,8 +155,8 @@ int split_read_sector(void *_fp,u32 lba,u32 count,void*buf)
|
||||
split_error("error seeking in disc partition");
|
||||
return 1;
|
||||
}
|
||||
//ret = fread(buf+i*512, 512ULL, chunk, f);
|
||||
ret = read(fd, buf+i*512, chunk * 512);
|
||||
void *ptr = ((u8 *)buf) + (i*512);
|
||||
ret = read(fd, ptr, chunk * 512);
|
||||
if (ret != chunk * 512) {
|
||||
fprintf(stderr, "error reading %u %u [%u] %u = %u\n",
|
||||
lba, count, i, chunk, ret);
|
||||
@ -189,7 +189,8 @@ int split_write_sector(void *_fp,u32 lba,u32 count,void*buf)
|
||||
}
|
||||
//if (fwrite(buf+i*512, 512ULL, chunk, f) != chunk) {
|
||||
//printf("write %d %p %d \n", fd, buf+i*512, chunk * 512);
|
||||
ret = write(fd, buf+i*512, chunk * 512);
|
||||
void *ptr = ((u8 *)buf) + (i*512);
|
||||
ret = write(fd, ptr, chunk * 512);
|
||||
//printf("write ret = %d \n", ret);
|
||||
if (ret != chunk * 512) {
|
||||
split_error("error writing disc");
|
||||
|
@ -1,3 +1,9 @@
|
||||
#ifndef _SPLITS_H
|
||||
#define _SPLITS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MAX_SPLIT 10
|
||||
|
||||
@ -30,6 +36,10 @@ void split_init(split_info_t *s, char *fname);
|
||||
void split_set_size(split_info_t *s, u64 split_size, u64 total_size);
|
||||
void split_close(split_info_t *s);
|
||||
int split_open(split_info_t *s, char *fname);
|
||||
int split_create(split_info_t *s, char *fname,
|
||||
u64 split_size, u64 total_size, bool overwrite);
|
||||
int split_create(split_info_t *s, char *fname, u64 split_size, u64 total_size, bool overwrite);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif //_SPLITS_H
|
@ -45,9 +45,10 @@ distribution.
|
||||
#define WBFS_BASE (('W'<<24)|('F'<<16)|('S'<<8))
|
||||
#define USB_IOCTL_WBFS_OPEN_DISC (WBFS_BASE+0x1)
|
||||
#define USB_IOCTL_WBFS_READ_DISC (WBFS_BASE+0x2)
|
||||
#define USB_IOCTL_WBFS_READ_DEBUG (WBFS_BASE+0x3)
|
||||
#define USB_IOCTL_WBFS_SET_DEVICE (WBFS_BASE+0x4)
|
||||
#define USB_IOCTL_WBFS_SET_FRAGLIST (WBFS_BASE+0x5)
|
||||
#define USB_IOCTL_WBFS_READ_DIRECT_DISC (WBFS_BASE+0x3)
|
||||
#define USB_IOCTL_WBFS_STS_DISC (WBFS_BASE+0x4)
|
||||
#define USB_IOCTL_WBFS_SET_DEVICE (WBFS_BASE+0x50)
|
||||
#define USB_IOCTL_WBFS_SET_FRAGLIST (WBFS_BASE+0x51)
|
||||
|
||||
#define UMS_HEAPSIZE 0x1000
|
||||
|
||||
@ -267,22 +268,6 @@ s32 USBStorage_WBFS_Read(u32 woffset, u32 len, void *buffer)
|
||||
}
|
||||
|
||||
|
||||
s32 USBStorage_WBFS_ReadDebug(u32 off, u32 size, void *buffer)
|
||||
{
|
||||
s32 ret;
|
||||
|
||||
USBStorage_Init();
|
||||
/* Device not opened */
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
/* Read data */
|
||||
ret = IOS_IoctlvFormat(hid, fd, USB_IOCTL_WBFS_READ_DEBUG, "ii:d", off, size, buffer, size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
s32 USBStorage_WBFS_SetDevice(int dev)
|
||||
{
|
||||
s32 ret;
|
||||
|
@ -14,7 +14,6 @@ extern "C" {
|
||||
|
||||
s32 USBStorage_WBFS_Open(char *buf_id);
|
||||
s32 USBStorage_WBFS_Read(u32 woffset, u32 len, void *buffer);
|
||||
s32 USBStorage_WBFS_ReadDebug(u32 off, u32 size, void *buffer);
|
||||
s32 USBStorage_WBFS_SetDevice(int dev);
|
||||
s32 USBStorage_WBFS_SetFragList(void *p, int size);
|
||||
|
||||
|
@ -1,645 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <malloc.h>
|
||||
#include <ogcsys.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "sdhc.h"
|
||||
#include "usbstorage.h"
|
||||
#include "utils.h"
|
||||
#include "video.h"
|
||||
#include "wdvd.h"
|
||||
#include "wbfs.h"
|
||||
#include "wbfs_fat.h"
|
||||
#include "fatmounter.h"
|
||||
#include "partition_usbloader.h"
|
||||
#include "settings/cfg.h"
|
||||
|
||||
#include "libwbfs/libwbfs.h"
|
||||
|
||||
/* Constants */
|
||||
#define MAX_NB_SECTORS 32
|
||||
|
||||
/* WBFS device */
|
||||
s32 wbfsDev = WBFS_MIN_DEVICE;
|
||||
|
||||
// partition
|
||||
int wbfs_part_fs = PART_FS_WBFS;
|
||||
u32 wbfs_part_idx = 0;
|
||||
u32 wbfs_part_lba = 0;
|
||||
|
||||
/* WBFS HDD */
|
||||
wbfs_t *hdd = NULL;
|
||||
|
||||
/* WBFS callbacks */
|
||||
static rw_sector_callback_t readCallback = NULL;
|
||||
static rw_sector_callback_t writeCallback = NULL;
|
||||
static s32 done = -1, total = -1;
|
||||
/* Variables */
|
||||
|
||||
static u32 nb_sectors, sector_size;
|
||||
|
||||
void WBFS_Spinner(s32 x, s32 max) {
|
||||
done = x;
|
||||
total = max;
|
||||
}
|
||||
|
||||
wbfs_disc_t* WBFS_OpenDisc(u8 *discid)
|
||||
{
|
||||
if (wbfs_part_fs) return WBFS_FAT_OpenDisc(discid);
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return NULL;
|
||||
|
||||
/* Open disc */
|
||||
return wbfs_open_disc(hdd, discid);
|
||||
}
|
||||
|
||||
void WBFS_CloseDisc(wbfs_disc_t *disc)
|
||||
{
|
||||
if (wbfs_part_fs) {
|
||||
WBFS_FAT_CloseDisc(disc);
|
||||
return;
|
||||
}
|
||||
|
||||
/* No device open */
|
||||
if (!hdd || !disc)
|
||||
return;
|
||||
|
||||
/* Close disc */
|
||||
wbfs_close_disc(disc);
|
||||
}
|
||||
|
||||
void GetProgressValue(s32 * d, s32 * m) {
|
||||
*d = done;
|
||||
*m = total;
|
||||
}
|
||||
|
||||
wbfs_t *GetHddInfo(void) {
|
||||
return hdd;
|
||||
}
|
||||
|
||||
s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) {
|
||||
void *buffer = NULL;
|
||||
|
||||
u64 offset;
|
||||
u32 mod, size;
|
||||
s32 ret;
|
||||
|
||||
/* Calculate offset */
|
||||
offset = ((u64)lba) << 2;
|
||||
|
||||
/* Calcualte sizes */
|
||||
mod = len % 32;
|
||||
size = len - mod;
|
||||
|
||||
/* Read aligned data */
|
||||
if (size) {
|
||||
ret = WDVD_UnencryptedRead(iobuf, size, offset);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Read non-aligned data */
|
||||
if (mod) {
|
||||
/* Allocate memory */
|
||||
buffer = memalign(32, 0x20);
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
/* Read data */
|
||||
ret = WDVD_UnencryptedRead(buffer, 0x20, offset + size);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
/* Copy data */
|
||||
memcpy(iobuf + size, buffer, mod);
|
||||
}
|
||||
|
||||
/* Success */
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
/* Free memory */
|
||||
if (buffer)
|
||||
free(buffer);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 __WBFS_ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do reads */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Read sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* USB read */
|
||||
ret = USBStorage_ReadSectors(lba + cnt, sectors, ptr);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 __WBFS_WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do writes */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Write sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* USB write */
|
||||
ret = USBStorage_WriteSectors(lba + cnt, sectors, ptr);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 __WBFS_ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do reads */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Read sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* SDHC read */
|
||||
ret = SDHC_ReadSectors(lba + cnt, sectors, ptr);
|
||||
if (!ret)
|
||||
return -1;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 __WBFS_WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do writes */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Write sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* SDHC write */
|
||||
ret = SDHC_WriteSectors(lba + cnt, sectors, ptr);
|
||||
if (!ret)
|
||||
return -1;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_Init(u32 device) {
|
||||
s32 ret;
|
||||
|
||||
switch (device) {
|
||||
case WBFS_DEVICE_USB:
|
||||
/* Initialize USB storage */
|
||||
ret = USBStorage_Init();
|
||||
if (ret >= 0) {
|
||||
/* Setup callbacks */
|
||||
readCallback = __WBFS_ReadUSB;
|
||||
writeCallback = __WBFS_WriteUSB;
|
||||
/* Device info */
|
||||
/* Get USB capacity */
|
||||
nb_sectors = USBStorage_GetCapacity(§or_size);
|
||||
if (!nb_sectors)
|
||||
return -1;
|
||||
} else
|
||||
return ret;
|
||||
break;
|
||||
case WBFS_DEVICE_SDHC:
|
||||
/* Initialize SDHC */
|
||||
ret = SDHC_Init();
|
||||
|
||||
if (ret) {
|
||||
/* Setup callbacks */
|
||||
readCallback = __WBFS_ReadSDHC;
|
||||
writeCallback = __WBFS_WriteSDHC;
|
||||
|
||||
/* Device info */
|
||||
nb_sectors = 0;
|
||||
sector_size = SDHC_SECTOR_SIZE;
|
||||
} else
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_Open(void) {
|
||||
/* Close hard disk */
|
||||
if (hdd)
|
||||
wbfs_close(hdd);
|
||||
|
||||
/* Open hard disk */
|
||||
wbfs_part_fs = wbfs_part_idx = wbfs_part_lba = 0;
|
||||
hdd = wbfs_open_hd(readCallback, writeCallback, NULL, sector_size, nb_sectors, 0);
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
// Save the new sector size, so it will be used in read and write calls
|
||||
sector_size = 1 << hdd->head->hd_sec_sz_s;
|
||||
|
||||
wbfs_part_idx = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_OpenPart(u32 part_fs, u32 part_idx, u32 part_lba, u32 part_size, char *partition)
|
||||
{
|
||||
// close
|
||||
WBFS_Close();
|
||||
|
||||
if (part_fs == PART_FS_FAT) {
|
||||
if (wbfsDev == WBFS_DEVICE_USB && part_lba == fat_usb_sec) {
|
||||
strcpy(wbfs_fs_drive, "USB:");
|
||||
} else if (wbfsDev == WBFS_DEVICE_SDHC && part_lba == fat_sd_sec) {
|
||||
strcpy(wbfs_fs_drive, "SD:");
|
||||
} else {
|
||||
if (WBFSDevice_Init(part_lba)) return -1;
|
||||
strcpy(wbfs_fs_drive, "WBFS:");
|
||||
}
|
||||
} else if (part_fs == PART_FS_NTFS) {
|
||||
int ret = MountNTFS(part_lba);
|
||||
if (ret) return ret;
|
||||
strcpy(wbfs_fs_drive, "NTFS:");
|
||||
} else {
|
||||
if (WBFS_OpenLBA(part_lba, part_size)) return -3;
|
||||
}
|
||||
|
||||
// success
|
||||
wbfs_part_fs = part_fs;
|
||||
wbfs_part_idx = part_idx;
|
||||
wbfs_part_lba = part_lba;
|
||||
|
||||
char *fs = "WBFS";
|
||||
if (wbfs_part_fs == PART_FS_FAT) fs = "FAT";
|
||||
if (wbfs_part_fs == PART_FS_NTFS) fs = "NTFS";
|
||||
sprintf(partition, "%s%d", fs, wbfs_part_idx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_OpenNamed(char *partition)
|
||||
{
|
||||
int i;
|
||||
u32 part_fs = PART_FS_WBFS;
|
||||
u32 part_idx = 0;
|
||||
u32 part_lba = 0;
|
||||
s32 ret = 0;
|
||||
PartList plist;
|
||||
|
||||
// close
|
||||
WBFS_Close();
|
||||
|
||||
// parse partition option
|
||||
if (strncasecmp(partition, "WBFS", 4) == 0) {
|
||||
i = atoi(partition+4);
|
||||
if (i < 1 || i > 4) goto err;
|
||||
part_fs = PART_FS_WBFS;
|
||||
part_idx = i;
|
||||
} else if (strncasecmp(partition, "FAT", 3) == 0) {
|
||||
if (wbfsDev != WBFS_DEVICE_USB) goto err;
|
||||
i = atoi(partition+3);
|
||||
if (i < 1 || i > 9) goto err;
|
||||
part_fs = PART_FS_FAT;
|
||||
part_idx = i;
|
||||
} else if (strncasecmp(partition, "NTFS", 4) == 0) {
|
||||
i = atoi(partition+4);
|
||||
if (i < 1 || i > 9) goto err;
|
||||
part_fs = PART_FS_NTFS;
|
||||
part_idx = i;
|
||||
} else {
|
||||
goto err;
|
||||
}
|
||||
|
||||
// Get partition entries
|
||||
ret = Partition_GetList(wbfsDev, &plist);
|
||||
if (ret || plist.num == 0) return -1;
|
||||
|
||||
if (part_fs == PART_FS_WBFS) {
|
||||
if (part_idx > plist.wbfs_n) goto err;
|
||||
for (i=0; i<plist.num; i++) {
|
||||
if (plist.pinfo[i].wbfs_i == part_idx) break;
|
||||
}
|
||||
} else if (part_fs == PART_FS_FAT) {
|
||||
if (part_idx > plist.fat_n) goto err;
|
||||
for (i=0; i<plist.num; i++) {
|
||||
if (plist.pinfo[i].fat_i == part_idx) break;
|
||||
}
|
||||
} else if (part_fs == PART_FS_NTFS) {
|
||||
if (part_idx > plist.ntfs_n) goto err;
|
||||
for (i=0; i<plist.num; i++) {
|
||||
if (plist.pinfo[i].ntfs_i == part_idx) break;
|
||||
}
|
||||
}
|
||||
if (i >= plist.num) goto err;
|
||||
// set partition lba sector
|
||||
part_lba = plist.pentry[i].sector;
|
||||
|
||||
if (WBFS_OpenPart(part_fs, part_idx, part_lba, plist.pentry[i].size, partition)) {
|
||||
goto err;
|
||||
}
|
||||
// success
|
||||
return 0;
|
||||
err:
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 WBFS_OpenLBA(u32 lba, u32 size)
|
||||
{
|
||||
wbfs_t *part = NULL;
|
||||
|
||||
/* Open partition */
|
||||
part = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 0);
|
||||
if (!part) return -1;
|
||||
|
||||
/* Close current hard disk */
|
||||
if (hdd) wbfs_close(hdd);
|
||||
hdd = part;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool WBFS_Close(void)
|
||||
{
|
||||
/* Close hard disk */
|
||||
if (hdd) {
|
||||
wbfs_close(hdd);
|
||||
hdd = NULL;
|
||||
}
|
||||
|
||||
WBFSDevice_deInit();
|
||||
wbfs_part_fs = 0;
|
||||
wbfs_part_idx = 0;
|
||||
wbfs_part_lba = 0;
|
||||
wbfs_fs_drive[0] = '\0';
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool WBFS_Mounted()
|
||||
{
|
||||
return (hdd != NULL);
|
||||
}
|
||||
|
||||
bool WBFS_Selected()
|
||||
{
|
||||
if (wbfs_part_fs && wbfs_part_lba && *wbfs_fs_drive) return true;
|
||||
return WBFS_Mounted();
|
||||
}
|
||||
|
||||
s32 WBFS_Format(u32 lba, u32 size) {
|
||||
wbfs_t *partition = NULL;
|
||||
|
||||
/* Reset partition */
|
||||
partition = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 1);
|
||||
if (!partition)
|
||||
return -1;
|
||||
|
||||
/* Free memory */
|
||||
wbfs_close(partition);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_GetCount(u32 *count) {
|
||||
if (wbfs_part_fs) return WBFS_FAT_GetCount(count);
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Get list length */
|
||||
*count = wbfs_count_discs(hdd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_GetHeaders(void *outbuf, u32 cnt, u32 len) {
|
||||
if (wbfs_part_fs) return WBFS_FAT_GetHeaders(outbuf, cnt, len);
|
||||
|
||||
u32 idx, size;
|
||||
s32 ret;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
for (idx = 0; idx < cnt; idx++) {
|
||||
u8 *ptr = ((u8 *)outbuf) + (idx * len);
|
||||
|
||||
/* Get header */
|
||||
ret = wbfs_get_disc_info(hdd, idx, ptr, len, &size);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_CheckGame(u8 *discid) {
|
||||
wbfs_disc_t *disc = NULL;
|
||||
|
||||
/* Try to open game disc */
|
||||
disc = WBFS_OpenDisc(discid);
|
||||
if (disc) {
|
||||
/* Close disc */
|
||||
WBFS_CloseDisc(disc);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_AddGame(void) {
|
||||
if (wbfs_part_fs) return WBFS_FAT_AddGame();
|
||||
|
||||
s32 ret;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Add game to device */
|
||||
partition_selector_t part_sel;
|
||||
int copy_1_1 = 0;
|
||||
|
||||
if (Settings.fullcopy) {
|
||||
part_sel = ALL_PARTITIONS;
|
||||
copy_1_1 = 1;
|
||||
} else {
|
||||
part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS;
|
||||
}
|
||||
|
||||
ret = wbfs_add_disc(hdd, __WBFS_ReadDVD, NULL, WBFS_Spinner, part_sel, copy_1_1);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_RemoveGame(u8 *discid) {
|
||||
if (wbfs_part_fs) return WBFS_FAT_RemoveGame(discid);
|
||||
|
||||
s32 ret;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Remove game from USB device */
|
||||
ret = wbfs_rm_disc(hdd, discid);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_GameSize(u8 *discid, f32 *size) {
|
||||
wbfs_disc_t *disc = NULL;
|
||||
|
||||
u32 sectors;
|
||||
|
||||
/* Open disc */
|
||||
disc = WBFS_OpenDisc(discid);
|
||||
if (!disc)
|
||||
return -2;
|
||||
|
||||
/* Get game size in sectors */
|
||||
sectors = wbfs_sector_used(disc->p, disc->header);
|
||||
|
||||
/* Copy value */
|
||||
*size = (disc->p->wbfs_sec_sz / GB_SIZE) * sectors;
|
||||
|
||||
/* Close disc */
|
||||
WBFS_CloseDisc(disc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_DiskSpace(f32 *used, f32 *free) {
|
||||
if (wbfs_part_fs) return WBFS_FAT_DiskSpace(used, free);
|
||||
|
||||
f32 ssize;
|
||||
u32 cnt;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Count used blocks */
|
||||
cnt = wbfs_count_usedblocks(hdd);
|
||||
|
||||
/* Sector size in GB */
|
||||
ssize = hdd->wbfs_sec_sz / GB_SIZE;
|
||||
|
||||
/* Copy values */
|
||||
*free = ssize * cnt;
|
||||
*used = ssize * (hdd->n_wbfs_sec - cnt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_RenameGame(u8 *discid, const void *newname)
|
||||
{
|
||||
if (wbfs_part_fs)
|
||||
{
|
||||
return WBFS_FAT_RenameGame(discid, newname);
|
||||
}
|
||||
|
||||
s32 ret;
|
||||
|
||||
/* No USB device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
ret = wbfs_ren_disc(hdd, discid,(u8*)newname);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_ReIDGame(u8 *discid, const void *newID)
|
||||
{
|
||||
if (wbfs_part_fs)
|
||||
{
|
||||
return WBFS_FAT_ReIDGame(discid, newID);
|
||||
}
|
||||
|
||||
s32 ret;
|
||||
|
||||
/* No USB device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
ret = wbfs_rID_disc(hdd, discid,(u8*)newID);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 WBFS_EstimeGameSize(void) {
|
||||
if (wbfs_part_fs) {
|
||||
return WBFS_FAT_EstimateGameSize();
|
||||
}
|
||||
|
||||
partition_selector_t part_sel = ONLY_GAME_PARTITION;
|
||||
if (Settings.fullcopy) {
|
||||
part_sel = ALL_PARTITIONS;
|
||||
} else {
|
||||
switch(Settings.partitions_to_install)
|
||||
{
|
||||
case install_game_only:
|
||||
part_sel = ONLY_GAME_PARTITION;
|
||||
break;
|
||||
case install_all:
|
||||
part_sel = ALL_PARTITIONS;
|
||||
break;
|
||||
case install_all_but_update:
|
||||
part_sel = REMOVE_UPDATE_PARTITION;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return wbfs_estimate_disc(hdd, __WBFS_ReadDVD, NULL, part_sel);
|
||||
}
|
260
source/usbloader/wbfs.cpp
Normal file
260
source/usbloader/wbfs.cpp
Normal file
@ -0,0 +1,260 @@
|
||||
#include <ogcsys.h>
|
||||
|
||||
#include "wbfs.h"
|
||||
#include "usbloader/wbfs/wbfs_base.h"
|
||||
#include "usbloader/wbfs/wbfs_wbfs.h"
|
||||
#include "usbloader/wbfs/wbfs_fat.h"
|
||||
#include "usbloader/wbfs/wbfs_ntfs.h"
|
||||
|
||||
#include "usbloader/partition_usbloader.h"
|
||||
#include "usbloader/getentries.h"
|
||||
#include "gecko.h"
|
||||
|
||||
Wbfs *current = NULL;
|
||||
|
||||
/* WBFS device */
|
||||
s32 wbfsDev = WBFS_MIN_DEVICE;
|
||||
|
||||
// partition
|
||||
char wbfs_fs_drive[16];
|
||||
int wbfs_part_fs = PART_FS_WBFS;
|
||||
u32 wbfs_part_idx = 0;
|
||||
u32 wbfs_part_lba = 0;
|
||||
|
||||
wbfs_disc_t* WBFS_OpenDisc(u8 *discid) {
|
||||
return current->OpenDisc(discid);
|
||||
}
|
||||
|
||||
void WBFS_CloseDisc(wbfs_disc_t *disc) {
|
||||
current->CloseDisc(disc);
|
||||
}
|
||||
|
||||
void GetProgressValue(s32 * d, s32 * m) {
|
||||
current->GetProgressValue(d, m);
|
||||
}
|
||||
|
||||
wbfs_t *GetHddInfo(void) {
|
||||
return current->GetHddInfo();
|
||||
}
|
||||
|
||||
s32 WBFS_Init(u32 device) {
|
||||
return Wbfs::Init(device);
|
||||
}
|
||||
|
||||
s32 WBFS_Open(void) {
|
||||
WBFS_Close();
|
||||
|
||||
current = new Wbfs_Wbfs(WBFS_DEVICE_USB, 0, 0); // Fix me!
|
||||
|
||||
wbfs_part_fs = wbfs_part_idx = wbfs_part_lba = 0;
|
||||
wbfs_part_idx = 1;
|
||||
|
||||
return current->Open();
|
||||
}
|
||||
|
||||
s32 WBFS_OpenPart(u32 part_fs, u32 part_idx, u32 part_lba, u32 part_size, char *partition)
|
||||
{
|
||||
// close
|
||||
WBFS_Close();
|
||||
|
||||
if (part_fs == PART_FS_FAT) {
|
||||
current = new Wbfs_Fat(wbfsDev, part_lba, part_size);
|
||||
strcpy(wbfs_fs_drive, "USB:");
|
||||
gprintf("Created WBFS_Fat instance at lba: %d of size %d\n", part_lba, part_size);
|
||||
} else if (part_fs == PART_FS_NTFS) {
|
||||
current = new Wbfs_Ntfs(wbfsDev, part_lba, part_size);
|
||||
strcpy(wbfs_fs_drive, "NTFS:");
|
||||
gprintf("Created WBFS_Ntfs instance at lba: %d of size %d\n", part_lba, part_size);
|
||||
} else {
|
||||
current = new Wbfs_Wbfs(wbfsDev, part_lba, part_size);
|
||||
gprintf("Created WBFS_Wbfs instance at lba: %d of size %d\n", part_lba, part_size);
|
||||
}
|
||||
if (current->Open())
|
||||
{
|
||||
delete current;
|
||||
current = NULL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// success
|
||||
wbfs_part_fs = part_fs;
|
||||
wbfs_part_idx = part_idx;
|
||||
wbfs_part_lba = part_lba;
|
||||
|
||||
const char *fs = "WBFS";
|
||||
if (wbfs_part_fs == PART_FS_FAT) fs = "FAT";
|
||||
if (wbfs_part_fs == PART_FS_NTFS) fs = "NTFS";
|
||||
sprintf(partition, "%s%d", fs, wbfs_part_idx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 WBFS_OpenNamed(char *partition)
|
||||
{
|
||||
u32 i;
|
||||
u32 part_fs = PART_FS_WBFS;
|
||||
u32 part_idx = 0;
|
||||
u32 part_lba = 0;
|
||||
s32 ret = 0;
|
||||
PartList plist;
|
||||
|
||||
// close
|
||||
WBFS_Close();
|
||||
|
||||
// parse partition option
|
||||
if (strncasecmp(partition, "WBFS", 4) == 0) {
|
||||
i = atoi(partition+4);
|
||||
if (i < 1 || i > 4) goto err;
|
||||
part_fs = PART_FS_WBFS;
|
||||
part_idx = i;
|
||||
} else if (strncasecmp(partition, "FAT", 3) == 0) {
|
||||
if (wbfsDev != WBFS_DEVICE_USB) goto err;
|
||||
i = atoi(partition+3);
|
||||
if (i < 1 || i > 9) goto err;
|
||||
part_fs = PART_FS_FAT;
|
||||
part_idx = i;
|
||||
} else if (strncasecmp(partition, "NTFS", 4) == 0) {
|
||||
i = atoi(partition+4);
|
||||
if (i < 1 || i > 9) goto err;
|
||||
part_fs = PART_FS_NTFS;
|
||||
part_idx = i;
|
||||
} else {
|
||||
goto err;
|
||||
}
|
||||
|
||||
// Get partition entries
|
||||
ret = Partition_GetList(wbfsDev, &plist);
|
||||
if (ret || plist.num == 0) return -1;
|
||||
|
||||
if (part_fs == PART_FS_WBFS) {
|
||||
if (part_idx > plist.wbfs_n) goto err;
|
||||
for (i=0; i<plist.num; i++) {
|
||||
if (plist.pinfo[i].wbfs_i == part_idx) break;
|
||||
}
|
||||
} else if (part_fs == PART_FS_FAT) {
|
||||
if (part_idx > plist.fat_n) goto err;
|
||||
for (i=0; i<plist.num; i++) {
|
||||
if (plist.pinfo[i].fat_i == part_idx) break;
|
||||
}
|
||||
} else if (part_fs == PART_FS_NTFS) {
|
||||
if (part_idx > plist.ntfs_n) goto err;
|
||||
for (i=0; i<plist.num; i++) {
|
||||
if (plist.pinfo[i].ntfs_i == part_idx) break;
|
||||
}
|
||||
}
|
||||
if (i >= plist.num) goto err;
|
||||
// set partition lba sector
|
||||
part_lba = plist.pentry[i].sector;
|
||||
|
||||
if (WBFS_OpenPart(part_fs, part_idx, part_lba, plist.pentry[i].size, partition)) {
|
||||
goto err;
|
||||
}
|
||||
// success
|
||||
return 0;
|
||||
err:
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 WBFS_OpenLBA(u32 lba, u32 size)
|
||||
{
|
||||
Wbfs *part = new Wbfs_Wbfs(wbfsDev, lba, size);
|
||||
if (part->Open() != 0)
|
||||
{
|
||||
delete part;
|
||||
return -1;
|
||||
}
|
||||
|
||||
WBFS_Close();
|
||||
current = part;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool WBFS_Close(void)
|
||||
{
|
||||
if (current != NULL) {
|
||||
current->Close();
|
||||
delete current;
|
||||
current = NULL;
|
||||
}
|
||||
|
||||
wbfs_part_fs = 0;
|
||||
wbfs_part_idx = 0;
|
||||
wbfs_part_lba = 0;
|
||||
wbfs_fs_drive[0] = '\0';
|
||||
|
||||
ResetGamelist();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool WBFS_Mounted()
|
||||
{
|
||||
return (current != NULL && current->Mounted());
|
||||
}
|
||||
|
||||
s32 WBFS_Format(u32 lba, u32 size) {
|
||||
return current->Format();
|
||||
}
|
||||
|
||||
s32 WBFS_GetCount(u32 *count) {
|
||||
return current->GetCount(count);
|
||||
}
|
||||
|
||||
s32 WBFS_GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len) {
|
||||
return current->GetHeaders(outbuf, cnt, len);
|
||||
}
|
||||
|
||||
s32 WBFS_CheckGame(u8 *discid) {
|
||||
return current->CheckGame(discid);
|
||||
}
|
||||
|
||||
s32 WBFS_AddGame(void) {
|
||||
s32 retval = current->AddGame();
|
||||
if (retval == 0) {
|
||||
ResetGamelist();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
s32 WBFS_RemoveGame(u8 *discid) {
|
||||
s32 retval = current->RemoveGame(discid);
|
||||
if (retval == 0) {
|
||||
ResetGamelist();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
s32 WBFS_GameSize(u8 *discid, f32 *size) {
|
||||
return current->GameSize(discid, size);
|
||||
}
|
||||
|
||||
s32 WBFS_DiskSpace(f32 *used, f32 *free) {
|
||||
return current->DiskSpace(used, free);
|
||||
}
|
||||
|
||||
s32 WBFS_RenameGame(u8 *discid, const void *newname) {
|
||||
s32 retval = current->RenameGame(discid, newname);
|
||||
if (retval == 0) {
|
||||
ResetGamelist();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
s32 WBFS_ReIDGame(u8 *discid, const void *newID) {
|
||||
s32 retval = current->ReIDGame(discid, newID);
|
||||
if (retval == 0) {
|
||||
ResetGamelist();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
f32 WBFS_EstimeGameSize(void) {
|
||||
return current->EstimateGameSize();
|
||||
}
|
||||
|
||||
int WBFS_GetFragList(u8 *id) {
|
||||
return current->GetFragList(id);
|
||||
}
|
||||
|
||||
bool WBFS_ShowFreeSpace(void) {
|
||||
return current->ShowFreeSpace();
|
||||
}
|
@ -1,25 +1,21 @@
|
||||
#ifndef _WBFS_H_
|
||||
#define _WBFS_H_
|
||||
|
||||
#include "libwbfs/libwbfs.h"
|
||||
#include "usbloader/disc.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "libwbfs/libwbfs.h"
|
||||
/* Device list */
|
||||
enum {
|
||||
WBFS_DEVICE_USB = 1, /* USB device */
|
||||
WBFS_DEVICE_SDHC /* SDHC device */
|
||||
};
|
||||
|
||||
/* Macros */
|
||||
#define WBFS_MIN_DEVICE 1
|
||||
#define WBFS_MAX_DEVICE 2
|
||||
|
||||
#define PART_FS_WBFS 0
|
||||
#define PART_FS_FAT 1
|
||||
#define PART_FS_NTFS 2
|
||||
|
||||
/* Macros */
|
||||
#define WBFS_MIN_DEVICE 1
|
||||
#define WBFS_MAX_DEVICE 2
|
||||
|
||||
extern s32 wbfsDev;
|
||||
extern int wbfs_part_fs;
|
||||
extern u32 wbfs_part_idx;
|
||||
@ -32,20 +28,24 @@ extern "C" {
|
||||
s32 WBFS_Open(void);
|
||||
s32 WBFS_Format(u32, u32);
|
||||
s32 WBFS_GetCount(u32 *);
|
||||
s32 WBFS_GetHeaders(void *, u32, u32);
|
||||
s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf);
|
||||
s32 WBFS_GetHeaders(struct discHdr *, u32, u32);
|
||||
// s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf);
|
||||
wbfs_t *GetHddInfo(void);
|
||||
s32 WBFS_CheckGame(u8 *);
|
||||
s32 WBFS_AddGame(void);
|
||||
s32 WBFS_RemoveGame(u8 *);
|
||||
s32 WBFS_GameSize(u8 *, f32 *);
|
||||
bool WBFS_ShowFreeSpace(void);
|
||||
s32 WBFS_DiskSpace(f32 *, f32 *);
|
||||
s32 WBFS_RenameGame(u8 *, const void *);
|
||||
s32 WBFS_ReIDGame(u8 *discid, const void *newID);
|
||||
f32 WBFS_EstimeGameSize(void);
|
||||
|
||||
int WBFS_GetFragList(u8 *id);
|
||||
/*
|
||||
s32 __WBFS_ReadUSB(void *fp, u32 lba, u32 count, void *iobuf);
|
||||
s32 __WBFS_WriteUSB(void *fp, u32 lba, u32 count, void *iobuf);
|
||||
*/
|
||||
|
||||
s32 WBFS_OpenPart(u32 part_fat, u32 part_idx, u32 part_lba, u32 part_size, char *partition);
|
||||
s32 WBFS_OpenNamed(char *partition);
|
||||
|
156
source/usbloader/wbfs/wbfs_base.cpp
Normal file
156
source/usbloader/wbfs/wbfs_base.cpp
Normal file
@ -0,0 +1,156 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <malloc.h>
|
||||
#include <ogcsys.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "usbloader/sdhc.h"
|
||||
#include "usbloader/usbstorage.h"
|
||||
#include "fatmounter.h"
|
||||
|
||||
#include "wbfs_base.h"
|
||||
|
||||
rw_sector_callback_t Wbfs::readCallback = NULL;
|
||||
rw_sector_callback_t Wbfs::writeCallback = NULL;
|
||||
s32 Wbfs::done = -1;
|
||||
s32 Wbfs::total = -1;
|
||||
u32 Wbfs::nb_sectors;
|
||||
u32 Wbfs::sector_size;
|
||||
|
||||
Wbfs::Wbfs(u32 device, u32 lba, u32 size) : hdd(NULL)
|
||||
{
|
||||
this->device = device;
|
||||
this->lba = lba;
|
||||
this->size = size;
|
||||
}
|
||||
|
||||
void Wbfs::GetProgressValue(s32 * d, s32 * m) {
|
||||
*d = done;
|
||||
*m = total;
|
||||
}
|
||||
|
||||
s32 Wbfs::Init(u32 device)
|
||||
{
|
||||
s32 ret;
|
||||
|
||||
switch (device) {
|
||||
case WBFS_DEVICE_USB:
|
||||
/* Initialize USB storage */
|
||||
ret = USBStorage_Init();
|
||||
if (ret >= 0) {
|
||||
/* Setup callbacks */
|
||||
readCallback = __ReadUSB;
|
||||
writeCallback = __WriteUSB;
|
||||
/* Device info */
|
||||
/* Get USB capacity */
|
||||
nb_sectors = USBStorage_GetCapacity(§or_size);
|
||||
if (!nb_sectors)
|
||||
return -1;
|
||||
} else
|
||||
return ret;
|
||||
break;
|
||||
case WBFS_DEVICE_SDHC:
|
||||
/* Initialize SDHC */
|
||||
ret = SDHC_Init();
|
||||
|
||||
if (ret) {
|
||||
/* Setup callbacks */
|
||||
readCallback = __ReadSDHC;
|
||||
writeCallback = __WriteSDHC;
|
||||
|
||||
/* Device info */
|
||||
nb_sectors = 0;
|
||||
sector_size = SDHC_SECTOR_SIZE;
|
||||
} else
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Wbfs::Close()
|
||||
{
|
||||
if (hdd) {
|
||||
wbfs_close(hdd);
|
||||
hdd = NULL;
|
||||
}
|
||||
|
||||
WBFSDevice_deInit();
|
||||
}
|
||||
|
||||
// Default behavior: can't format
|
||||
s32 Wbfs::Format()
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 Wbfs::CheckGame(u8 *discid)
|
||||
{
|
||||
wbfs_disc_t *disc = NULL;
|
||||
|
||||
/* Try to open game disc */
|
||||
disc = OpenDisc(discid);
|
||||
if (disc) {
|
||||
/* Close disc */
|
||||
CloseDisc(disc);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs::GameSize(u8 *discid, f32 *size)
|
||||
{
|
||||
wbfs_disc_t *disc = NULL;
|
||||
|
||||
u32 sectors;
|
||||
|
||||
/* Open disc */
|
||||
disc = OpenDisc(discid);
|
||||
if (!disc)
|
||||
return -2;
|
||||
|
||||
/* Get game size in sectors */
|
||||
sectors = wbfs_sector_used(disc->p, disc->header);
|
||||
|
||||
/* Copy value */
|
||||
*size = (disc->p->wbfs_sec_sz / GB_SIZE) * sectors;
|
||||
|
||||
/* Close disc */
|
||||
CloseDisc(disc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Wbfs::Spinner(s32 x, s32 max)
|
||||
{
|
||||
done = x;
|
||||
total = max;
|
||||
}
|
||||
|
||||
wbfs_t *Wbfs::GetHddInfo()
|
||||
{
|
||||
return hdd;
|
||||
}
|
||||
|
||||
bool Wbfs::Mounted()
|
||||
{
|
||||
return hdd == NULL;
|
||||
}
|
||||
|
||||
int Wbfs::GetFragList(u8 *id)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Wbfs::GetFragList(char *filename, _frag_append_t append_fragment, FragList *)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool Wbfs::ShowFreeSpace(void)
|
||||
{
|
||||
return true;
|
||||
}
|
64
source/usbloader/wbfs/wbfs_base.h
Normal file
64
source/usbloader/wbfs/wbfs_base.h
Normal file
@ -0,0 +1,64 @@
|
||||
#ifndef _H
|
||||
#define _H
|
||||
|
||||
#include "libwbfs/libwbfs.h"
|
||||
#include "usbloader/utils.h"
|
||||
#include "usbloader/frag.h"
|
||||
|
||||
class Wbfs
|
||||
{
|
||||
public:
|
||||
Wbfs(u32, u32, u32);
|
||||
|
||||
void GetProgressValue(s32 * d, s32 * m);
|
||||
static s32 Init(u32);
|
||||
void Close();
|
||||
s32 CheckGame(u8 *);
|
||||
s32 GameSize(u8 *, f32 *);
|
||||
wbfs_t *GetHddInfo(void);
|
||||
bool Mounted();
|
||||
virtual int GetFragList(u8 *id);
|
||||
virtual int GetFragList(char *filename, _frag_append_t append_fragment, FragList *);
|
||||
virtual bool ShowFreeSpace(void);
|
||||
|
||||
virtual s32 Open() = 0;
|
||||
virtual wbfs_disc_t* OpenDisc(u8 *discid) = 0;
|
||||
virtual void CloseDisc(wbfs_disc_t *disc) = 0;
|
||||
virtual s32 Format();
|
||||
virtual s32 GetCount(u32 *) = 0;
|
||||
virtual s32 GetHeaders(struct discHdr *, u32, u32) = 0;
|
||||
virtual s32 AddGame(void) = 0;
|
||||
virtual s32 RemoveGame(u8 *) = 0;
|
||||
virtual s32 DiskSpace(f32 *, f32 *) = 0;
|
||||
virtual s32 RenameGame(u8 *, const void *) = 0;
|
||||
virtual s32 ReIDGame(u8 *discid, const void *newID) = 0;
|
||||
virtual f32 EstimateGameSize(void) = 0;
|
||||
|
||||
/*
|
||||
static s32 OpenPart(u32 part_fat, u32 part_idx, u32 part_lba, u32 part_size, char *partition);
|
||||
static s32 OpenNamed(char *partition);
|
||||
static s32 OpenLBA(u32 lba, u32 size);
|
||||
*/
|
||||
protected:
|
||||
static rw_sector_callback_t readCallback;
|
||||
static rw_sector_callback_t writeCallback;
|
||||
static s32 __ReadDVD(void *fp, u32 lba, u32 len, void *iobuf);
|
||||
static void Spinner(s32 x, s32 max);
|
||||
|
||||
static u32 nb_sectors;
|
||||
static u32 sector_size;
|
||||
|
||||
/* WBFS HDD */
|
||||
wbfs_t *hdd;
|
||||
|
||||
u32 device, lba, size;
|
||||
private:
|
||||
static s32 __ReadUSB(void *fp, u32 lba, u32 count, void *iobuf);
|
||||
static s32 __WriteUSB(void *fp, u32 lba, u32 count, void *iobuf);
|
||||
static s32 __ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf);
|
||||
static s32 __WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf);
|
||||
|
||||
static s32 total, done;
|
||||
};
|
||||
|
||||
#endif //_H
|
812
source/usbloader/wbfs/wbfs_fat.cpp
Normal file
812
source/usbloader/wbfs/wbfs_fat.cpp
Normal file
@ -0,0 +1,812 @@
|
||||
// WBFS FAT by oggzee
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <malloc.h>
|
||||
#include <ogcsys.h>
|
||||
#include <dirent.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "settings/cfg.h"
|
||||
#include "usbloader/disc.h"
|
||||
#include "fatmounter.h"
|
||||
#include "wbfs_fat.h"
|
||||
|
||||
#include "gecko.h"
|
||||
|
||||
#define MAX_FAT_PATH 1024
|
||||
#define TITLE_LEN 64
|
||||
|
||||
using namespace std;
|
||||
|
||||
char Wbfs_Fat::wbfs_fs_drive[16];
|
||||
char Wbfs_Fat::wbfs_fat_dir[16] = "/wbfs";
|
||||
char Wbfs_Fat::invalid_path[] = "/\\:|<>?*\"'";
|
||||
struct discHdr *Wbfs_Fat::fat_hdr_list = NULL;
|
||||
u32 Wbfs_Fat::fat_hdr_count = 0;
|
||||
|
||||
extern "C"
|
||||
{
|
||||
int _FAT_get_fragments (const char *path, _frag_append_t append_fragment, void *callback_data);
|
||||
extern FragList *frag_list;
|
||||
}
|
||||
|
||||
u32 Wbfs_Fat::fat_sector_size = 512;
|
||||
|
||||
Wbfs_Fat::Wbfs_Fat(u32 device, u32 lba, u32 size) : Wbfs(device, lba, size)
|
||||
{
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::Open()
|
||||
{
|
||||
if (device == WBFS_DEVICE_USB && lba == fat_usb_sec) {
|
||||
strcpy(wbfs_fs_drive, "USB:");
|
||||
} else if (device == WBFS_DEVICE_SDHC && lba == fat_sd_sec) {
|
||||
strcpy(wbfs_fs_drive, "SD:");
|
||||
} else {
|
||||
if (WBFSDevice_Init(lba)) return -1;
|
||||
strcpy(wbfs_fs_drive, "WBFS:");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
wbfs_disc_t* Wbfs_Fat::OpenDisc(u8 *discid)
|
||||
{
|
||||
char fname[MAX_FAT_PATH];
|
||||
|
||||
// wbfs 'partition' file
|
||||
if (!FindFilename(discid, fname, sizeof(fname)) ) return NULL;
|
||||
|
||||
if (strcasecmp(strrchr(fname,'.'), ".iso") == 0) {
|
||||
// .iso file
|
||||
// create a fake wbfs_disc
|
||||
int fd;
|
||||
fd = open(fname, O_RDONLY);
|
||||
if (fd == -1) return NULL;
|
||||
wbfs_disc_t *iso_file = (wbfs_disc_t *)calloc(sizeof(wbfs_disc_t),1);
|
||||
if (iso_file == NULL) return NULL;
|
||||
// mark with a special wbfs_part
|
||||
wbfs_iso_file.wbfs_sec_sz = 512;
|
||||
iso_file->p = &wbfs_iso_file;
|
||||
iso_file->header = (wbfs_disc_info_t*)fd;
|
||||
return iso_file;
|
||||
}
|
||||
|
||||
wbfs_t *part = OpenPart(fname);
|
||||
if (!part) return NULL;
|
||||
return wbfs_open_disc(part, discid);
|
||||
}
|
||||
|
||||
void Wbfs_Fat::CloseDisc(wbfs_disc_t* disc)
|
||||
{
|
||||
if (!disc) return;
|
||||
wbfs_t *part = disc->p;
|
||||
|
||||
// is this really a .iso file?
|
||||
if (part == &wbfs_iso_file) {
|
||||
close((int)disc->header);
|
||||
free(disc);
|
||||
return;
|
||||
}
|
||||
|
||||
wbfs_close_disc(disc);
|
||||
ClosePart(part);
|
||||
return;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::GetCount(u32 *count)
|
||||
{
|
||||
*count = 0;
|
||||
GetHeadersCount();
|
||||
if (fat_hdr_count && fat_hdr_list) {
|
||||
// for compacter mem - move up as it will be freed later
|
||||
int size = fat_hdr_count * sizeof(struct discHdr);
|
||||
struct discHdr *buf = (struct discHdr *) malloc(size);
|
||||
if (buf) {
|
||||
memcpy(buf, fat_hdr_list, size);
|
||||
SAFE_FREE(fat_hdr_list);
|
||||
fat_hdr_list = buf;
|
||||
}
|
||||
}
|
||||
*count = fat_hdr_count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len)
|
||||
{
|
||||
u32 i;
|
||||
if (len > sizeof(struct discHdr)) {
|
||||
len = sizeof(struct discHdr);
|
||||
}
|
||||
gprintf("GetHeaders\n");
|
||||
for (i=0; i<cnt && i<fat_hdr_count; i++) {
|
||||
memcpy(&outbuf[i], &fat_hdr_list[i], len);
|
||||
}
|
||||
SAFE_FREE(fat_hdr_list);
|
||||
fat_hdr_count = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::AddGame(void)
|
||||
{
|
||||
static struct discHdr header ATTRIBUTE_ALIGN(32);
|
||||
char path[MAX_FAT_PATH];
|
||||
wbfs_t *part = NULL;
|
||||
s32 ret;
|
||||
|
||||
// read ID from DVD
|
||||
Disc_ReadHeader(&header);
|
||||
// path
|
||||
GetDir(&header, path);
|
||||
// create wbfs 'partition' file
|
||||
part = CreatePart(header.id, path);
|
||||
if (!part) return -1;
|
||||
/* Add game to device */
|
||||
partition_selector_t part_sel = ALL_PARTITIONS;
|
||||
int copy_1_1 = Settings.fullcopy;
|
||||
switch (Settings.partitions_to_install) {
|
||||
case install_game_only:
|
||||
part_sel = ONLY_GAME_PARTITION;
|
||||
break;
|
||||
case install_all:
|
||||
part_sel = ALL_PARTITIONS;
|
||||
break;
|
||||
case install_all_but_update:
|
||||
part_sel = REMOVE_UPDATE_PARTITION;
|
||||
break;
|
||||
}
|
||||
if (copy_1_1) {
|
||||
part_sel = ALL_PARTITIONS;
|
||||
}
|
||||
wbfs_t *old_hdd = hdd;
|
||||
hdd = part; // used by spinner
|
||||
ret = wbfs_add_disc(part, __ReadDVD, NULL, Spinner, part_sel, copy_1_1);
|
||||
hdd = old_hdd;
|
||||
wbfs_trim(part);
|
||||
ClosePart(part);
|
||||
|
||||
if (ret < 0) return ret;
|
||||
mk_title_txt(&header, path);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::RemoveGame(u8 *discid)
|
||||
{
|
||||
char fname[MAX_FAT_PATH];
|
||||
int loc;
|
||||
// wbfs 'partition' file
|
||||
loc = FindFilename(discid, fname, sizeof(fname));
|
||||
if ( !loc ) return -1;
|
||||
split_create(&split, fname, 0, 0, true);
|
||||
split_close(&split);
|
||||
if (loc == 1) return 0;
|
||||
|
||||
// game is in subdir
|
||||
// remove optional .txt file
|
||||
DIR_ITER *dir_iter;
|
||||
struct stat st;
|
||||
char path[MAX_FAT_PATH];
|
||||
char name[MAX_FAT_PATH];
|
||||
strncpy(path, fname, sizeof(path));
|
||||
char *p = strrchr(path, '/');
|
||||
if (p) *p = 0;
|
||||
dir_iter = diropen(path);
|
||||
if (!dir_iter) return 0;
|
||||
while (dirnext(dir_iter, name, &st) == 0) {
|
||||
if (name[0] == '.') continue;
|
||||
if (name[6] != '_') continue;
|
||||
if (strncmp(name, (char*)discid, 6) != 0) continue;
|
||||
p = strrchr(name, '.');
|
||||
if (!p) continue;
|
||||
if (strcasecmp(p, ".txt") != 0) continue;
|
||||
snprintf(fname, sizeof(fname), "%s/%s", path, name);
|
||||
remove(fname);
|
||||
break;
|
||||
}
|
||||
dirclose(dir_iter);
|
||||
// remove game subdir
|
||||
unlink(path);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::DiskSpace(f32 *used, f32 *free)
|
||||
{
|
||||
f32 size;
|
||||
int ret;
|
||||
struct statvfs wbfs_fat_vfs;
|
||||
|
||||
*used = 0;
|
||||
*free = 0;
|
||||
ret = statvfs(wbfs_fs_drive, &wbfs_fat_vfs);
|
||||
if (ret) return -1;
|
||||
|
||||
/* FS size in GB */
|
||||
size = (f32)wbfs_fat_vfs.f_frsize * (f32)wbfs_fat_vfs.f_blocks / GB_SIZE;
|
||||
*free = (f32)wbfs_fat_vfs.f_frsize * (f32)wbfs_fat_vfs.f_bfree / GB_SIZE;
|
||||
*used = size - *free;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::RenameGame(u8 *discid, const void *newname)
|
||||
{
|
||||
wbfs_t *part = OpenPart((char *) discid);
|
||||
if (!part)
|
||||
return -1;
|
||||
|
||||
s32 ret = wbfs_ren_disc(part, discid,(u8*)newname);
|
||||
|
||||
ClosePart(part);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::ReIDGame(u8 *discid, const void *newID)
|
||||
{
|
||||
wbfs_t *part = OpenPart((char *) discid);
|
||||
if (!part)
|
||||
return -1;
|
||||
|
||||
s32 ret = wbfs_rID_disc(part, discid,(u8*)newID);
|
||||
|
||||
ClosePart(part);
|
||||
|
||||
if(ret == 0)
|
||||
{
|
||||
char fname[100];
|
||||
char fnamenew[100];
|
||||
s32 cnt = 0x31;
|
||||
|
||||
Filename(discid, fname, sizeof(fname), NULL);
|
||||
Filename((u8*) newID, fnamenew, sizeof(fnamenew), NULL);
|
||||
|
||||
int stringlength = strlen(fname);
|
||||
|
||||
while(rename(fname, fnamenew) == 0)
|
||||
{
|
||||
fname[stringlength] = cnt;
|
||||
fname[stringlength+1] = 0;
|
||||
fnamenew[stringlength] = cnt;
|
||||
fnamenew[stringlength+1] = 0;
|
||||
cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
f32 Wbfs_Fat::EstimateGameSize()
|
||||
{
|
||||
wbfs_t *part = NULL;
|
||||
u64 size = (u64)143432*2*0x8000ULL;
|
||||
u32 n_sector = size / fat_sector_size;
|
||||
u32 wii_sec_sz;
|
||||
|
||||
// init a temporary dummy part
|
||||
// as a placeholder for wbfs_size_disc
|
||||
part = wbfs_open_partition(
|
||||
nop_rw_sector, nop_rw_sector,
|
||||
NULL, fat_sector_size, n_sector, 0, 1);
|
||||
if (!part) return -1;
|
||||
wii_sec_sz = part->wii_sec_sz;
|
||||
|
||||
partition_selector_t part_sel;
|
||||
if (Settings.fullcopy) {
|
||||
part_sel = ALL_PARTITIONS;
|
||||
} else {
|
||||
part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS;
|
||||
}
|
||||
return wbfs_estimate_disc(part, __ReadDVD, NULL, part_sel);
|
||||
}
|
||||
|
||||
// TITLE [GAMEID]
|
||||
bool Wbfs_Fat::CheckLayoutB(char *fname, int len, u8* id, char *fname_title)
|
||||
{
|
||||
if (len <= 8) return false;
|
||||
if (fname[len-8] != '[' || fname[len-1] != ']') return false;
|
||||
if (!is_gameid(&fname[len-7])) return false;
|
||||
strncpy(fname_title, fname, TITLE_LEN);
|
||||
// cut at '['
|
||||
fname_title[len-8] = 0;
|
||||
int n = strlen(fname_title);
|
||||
if (n == 0) return false;
|
||||
// cut trailing _ or ' '
|
||||
if (fname_title[n - 1] == ' ' || fname_title[n - 1] == '_' ) {
|
||||
fname_title[n - 1] = 0;
|
||||
}
|
||||
if (strlen(fname_title) == 0) return false;
|
||||
if (id) {
|
||||
memcpy(id, &fname[len-7], 6);
|
||||
id[6] = 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 Wbfs_Fat::GetHeadersCount()
|
||||
{
|
||||
char path[MAX_FAT_PATH];
|
||||
char fname[MAX_FAT_PATH];
|
||||
char fpath[MAX_FAT_PATH];
|
||||
struct discHdr tmpHdr;
|
||||
struct stat st;
|
||||
wbfs_t *part = NULL;
|
||||
u8 id[8];
|
||||
int ret;
|
||||
char *p;
|
||||
u32 size;
|
||||
int is_dir;
|
||||
int len;
|
||||
char dir_title[65];
|
||||
char fname_title[TITLE_LEN];
|
||||
char *title;
|
||||
DIR_ITER *dir_iter;
|
||||
|
||||
//dbg_time1();
|
||||
|
||||
SAFE_FREE(fat_hdr_list);
|
||||
fat_hdr_count = 0;
|
||||
|
||||
strcpy(path, wbfs_fs_drive);
|
||||
strcat(path, wbfs_fat_dir);
|
||||
|
||||
dir_iter = diropen(path);
|
||||
if (!dir_iter) return 0;
|
||||
|
||||
dir_iter = diropen(path);
|
||||
if (!dir_iter) return 0;
|
||||
|
||||
while (dirnext(dir_iter, fname, &st) == 0) {
|
||||
//printf("found: %s\n", fname); Wpad_WaitButtonsCommon();
|
||||
if ((char)fname[0] == '.') continue;
|
||||
len = strlen(fname);
|
||||
if (len < 8) continue; // "GAMEID_x"
|
||||
|
||||
memcpy(id, fname, 6);
|
||||
id[6] = 0;
|
||||
*fname_title = 0;
|
||||
|
||||
is_dir = S_ISDIR(st.st_mode);
|
||||
//printf("mode: %d %d %x\n", is_dir, st.st_mode, st.st_mode);
|
||||
if (is_dir) {
|
||||
int lay_a = 0;
|
||||
int lay_b = 0;
|
||||
if (fname[6] == '_' && is_gameid((char*)id)) {
|
||||
// usb:/wbfs/GAMEID_TITLE/GAMEID.wbfs
|
||||
lay_a = 1;
|
||||
}
|
||||
if (CheckLayoutB(fname, len, NULL, fname_title)) {
|
||||
// usb:/wbfs/TITLE[GAMEID]/GAMEID.wbfs
|
||||
lay_b = 1;
|
||||
}
|
||||
if (!lay_a && !lay_b) continue;
|
||||
if (lay_a) {
|
||||
strncpy(dir_title, &fname[7], sizeof(dir_title));
|
||||
} else {
|
||||
try_lay_b:
|
||||
if (!CheckLayoutB(fname, len, id, fname_title)) continue;
|
||||
}
|
||||
snprintf(fpath, sizeof(fpath), "%s/%s/%s.wbfs", path, fname, id);
|
||||
//printf("path2: %s\n", fpath);
|
||||
// if more than 50 games, skip second stat to improve speed
|
||||
// but if ambiguous layout check anyway
|
||||
if (fat_hdr_count < 50 || (lay_a && lay_b)) {
|
||||
if (stat(fpath, &st) == -1) {
|
||||
//printf("missing: %s\n", fpath);
|
||||
// try .iso
|
||||
strcpy(strrchr(fpath, '.'), ".iso"); // replace .wbfs with .iso
|
||||
if (stat(fpath, &st) == -1) {
|
||||
//printf("missing: %s\n", fpath);
|
||||
if (lay_a && lay_b == 1) {
|
||||
// mark lay_b so that the stat check is still done,
|
||||
// but lay_b is not re-tried again
|
||||
lay_b = 2;
|
||||
// retry with layout b
|
||||
goto try_lay_b;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
st.st_size = 1024*1024;
|
||||
}
|
||||
} else {
|
||||
// usb:/wbfs/GAMEID.wbfs
|
||||
// or usb:/wbfs/GAMEID.iso
|
||||
p = strrchr(fname, '.');
|
||||
if (!p) continue;
|
||||
if ( (strcasecmp(p, ".wbfs") != 0)
|
||||
&& (strcasecmp(p, ".iso") != 0) ) continue;
|
||||
int n = p - fname; // length withouth .wbfs
|
||||
if (n != 6) {
|
||||
// TITLE [GAMEID].wbfs
|
||||
if (!CheckLayoutB(fname, n, id, fname_title)) continue;
|
||||
}
|
||||
snprintf(fpath, sizeof(fpath), "%s/%s", path, fname);
|
||||
}
|
||||
|
||||
//printf("found: %s %d MB\n", fpath, (int)(st.st_size/1024/1024));
|
||||
// size must be at least 1MB to be considered a valid wbfs file
|
||||
if (st.st_size < 1024*1024) continue;
|
||||
// if we have titles.txt entry use that
|
||||
title = cfg_get_title(id);
|
||||
// if no titles.txt get title from dir or file name
|
||||
if (!title && *fname_title) {
|
||||
title = fname_title;
|
||||
}
|
||||
if (title) {
|
||||
memset(&tmpHdr, 0, sizeof(tmpHdr));
|
||||
memcpy(tmpHdr.id, id, 6);
|
||||
strncpy(tmpHdr.title, title, sizeof(tmpHdr.title)-1);
|
||||
tmpHdr.magic = 0x5D1C9EA3;
|
||||
goto add_hdr;
|
||||
}
|
||||
|
||||
// else read it from file directly
|
||||
if (strcasecmp(strrchr(fpath,'.'), ".wbfs") == 0) {
|
||||
// wbfs file directly
|
||||
FILE *fp = fopen(fpath, "rb");
|
||||
if (fp != NULL) {
|
||||
fseek(fp, 512, SEEK_SET);
|
||||
fread(&tmpHdr, sizeof(struct discHdr), 1, fp);
|
||||
fclose(fp);
|
||||
if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) {
|
||||
goto add_hdr;
|
||||
}
|
||||
}
|
||||
// no title found, read it from wbfs file
|
||||
// but this is a little bit slower
|
||||
// open 'partition' file
|
||||
part = OpenPart(fpath);
|
||||
if (!part) {
|
||||
continue;
|
||||
}
|
||||
// Get header
|
||||
ret = wbfs_get_disc_info(part, 0, (u8*)&tmpHdr,
|
||||
sizeof(struct discHdr), &size);
|
||||
ClosePart(part);
|
||||
if (ret == 0) {
|
||||
goto add_hdr;
|
||||
}
|
||||
} else if (strcasecmp(strrchr(fpath,'.'), ".iso") == 0) {
|
||||
// iso file
|
||||
FILE *fp = fopen(fpath, "rb");
|
||||
if (fp != NULL) {
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
fread(&tmpHdr, sizeof(struct discHdr), 1, fp);
|
||||
fclose(fp);
|
||||
if ((tmpHdr.magic == 0x5D1C9EA3) && (memcmp(tmpHdr.id, id, 6) == 0)) {
|
||||
goto add_hdr;
|
||||
}
|
||||
}
|
||||
}
|
||||
// fail:
|
||||
continue;
|
||||
|
||||
// succes: add tmpHdr to list:
|
||||
add_hdr:
|
||||
memset(&st, 0, sizeof(st));
|
||||
//printf("added: %.6s %.20s\n", tmpHdr.id, tmpHdr.title); Wpad_WaitButtons();
|
||||
fat_hdr_count++;
|
||||
fat_hdr_list = (struct discHdr *) realloc(fat_hdr_list, fat_hdr_count * sizeof(struct discHdr));
|
||||
memcpy(&fat_hdr_list[fat_hdr_count-1], &tmpHdr, sizeof(struct discHdr));
|
||||
}
|
||||
dirclose(dir_iter);
|
||||
//dbg_time2("\nFAT_GetCount"); Wpad_WaitButtonsCommon();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Wbfs_Fat::FindFilename(u8 *id, char *fname, int len)
|
||||
{
|
||||
struct stat st;
|
||||
// look for direct .wbfs file
|
||||
Filename(id, fname, len, NULL);
|
||||
if (stat(fname, &st) == 0) return 1;
|
||||
// look for direct .iso file
|
||||
strcpy(strrchr(fname, '.'), ".iso"); // replace .wbfs with .iso
|
||||
if (stat(fname, &st) == 0) return 1;
|
||||
// direct file not found, check subdirs
|
||||
*fname = 0;
|
||||
DIR_ITER *dir_iter;
|
||||
char path[MAX_FAT_PATH];
|
||||
char name[MAX_FAT_PATH];
|
||||
strcpy(path, wbfs_fs_drive);
|
||||
strcat(path, wbfs_fat_dir);
|
||||
dir_iter = diropen(path);
|
||||
//printf("dir: %s %p\n", path, dir); Wpad_WaitButtons();
|
||||
if (!dir_iter) {
|
||||
return 0;
|
||||
}
|
||||
while (dirnext(dir_iter, name, &st) == 0) {
|
||||
//dbg_printf("name:%s\n", name);
|
||||
if (name[0] == '.') continue;
|
||||
int n = strlen(name);
|
||||
if (n < 8) continue;
|
||||
if (S_ISDIR(st.st_mode)) {
|
||||
if (name[6] == '_') {
|
||||
// GAMEID_TITLE
|
||||
if (strncmp(name, (char*)id, 6) != 0) goto try_alter;
|
||||
} else {
|
||||
try_alter:
|
||||
// TITLE [GAMEID]
|
||||
if (name[n-8] != '[' || name[n-1] != ']') continue;
|
||||
if (strncmp(&name[n-7], (char*)id, 6) != 0) continue;
|
||||
}
|
||||
// look for .wbfs file
|
||||
snprintf(fname, len, "%s/%s/%.6s.wbfs", path, name, id);
|
||||
if (stat(fname, &st) == 0) break;
|
||||
// look for .iso file
|
||||
snprintf(fname, len, "%s/%s/%.6s.iso", path, name, id);
|
||||
} else {
|
||||
// TITLE [GAMEID].wbfs
|
||||
char fn_title[TITLE_LEN];
|
||||
u8 fn_id[8];
|
||||
char *p = strrchr(name, '.');
|
||||
if (!p) continue;
|
||||
if ( (strcasecmp(p, ".wbfs") != 0)
|
||||
&& (strcasecmp(p, ".iso") != 0) ) continue;
|
||||
int n = p - name; // length withouth .wbfs
|
||||
if (!CheckLayoutB(name, n, fn_id, fn_title)) continue;
|
||||
if (strncmp((char*)fn_id, (char*)id, 6) != 0) continue;
|
||||
snprintf(fname, len, "%s/%s", path, name);
|
||||
}
|
||||
if (stat(fname, &st) == 0) break;
|
||||
*fname = 0;
|
||||
}
|
||||
dirclose(dir_iter);
|
||||
if (*fname) {
|
||||
// found
|
||||
//printf("found:%s\n", fname);
|
||||
return 2;
|
||||
}
|
||||
// not found
|
||||
return 0;
|
||||
}
|
||||
|
||||
wbfs_t* Wbfs_Fat::OpenPart(char *fname)
|
||||
{
|
||||
wbfs_t *part = NULL;
|
||||
int ret;
|
||||
|
||||
// wbfs 'partition' file
|
||||
ret = split_open(&split, fname);
|
||||
if (ret) return NULL;
|
||||
part = wbfs_open_partition(
|
||||
split_read_sector,
|
||||
nop_rw_sector, //readonly //split_write_sector,
|
||||
&split, fat_sector_size, split.total_sec, 0, 0);
|
||||
if (!part) {
|
||||
split_close(&split);
|
||||
}
|
||||
return part;
|
||||
}
|
||||
|
||||
void Wbfs_Fat::ClosePart(wbfs_t* part)
|
||||
{
|
||||
if (!part) return;
|
||||
split_info_t *s = (split_info_t*)part->callback_data;
|
||||
wbfs_close(part);
|
||||
if (s) split_close(s);
|
||||
}
|
||||
|
||||
void Wbfs_Fat::Filename(u8 *id, char *fname, int len, char *path)
|
||||
{
|
||||
if (path == NULL) {
|
||||
snprintf(fname, len, "%s%s/%.6s.wbfs", wbfs_fs_drive, wbfs_fat_dir, id);
|
||||
} else {
|
||||
snprintf(fname, len, "%s/%.6s.wbfs", path, id);
|
||||
}
|
||||
}
|
||||
|
||||
void Wbfs_Fat::GetDir(struct discHdr *header, char *path)
|
||||
{
|
||||
strcpy(path, wbfs_fs_drive);
|
||||
strcat(path, wbfs_fat_dir);
|
||||
if (Settings.FatInstallToDir) {
|
||||
strcat(path, "/");
|
||||
int layout = 0;
|
||||
if (Settings.FatInstallToDir == 2) layout = 1;
|
||||
mk_gameid_title(header, path + strlen(path), 0, layout);
|
||||
}
|
||||
}
|
||||
|
||||
wbfs_t* Wbfs_Fat::CreatePart(u8 *id, char *path)
|
||||
{
|
||||
char fname[MAX_FAT_PATH];
|
||||
wbfs_t *part = NULL;
|
||||
u64 size = (u64)143432*2*0x8000ULL;
|
||||
u32 n_sector = size / 512;
|
||||
int ret;
|
||||
|
||||
//printf("CREATE PART %s %lld %d\n", id, size, n_sector);
|
||||
snprintf(fname, sizeof(fname), "%s%s", wbfs_fs_drive, wbfs_fat_dir);
|
||||
mkdir(fname, 0777); // base usb:/wbfs
|
||||
mkdir(path, 0777); // game subdir
|
||||
Filename(id, fname, sizeof(fname), path);
|
||||
printf("Writing to %s\n", fname);
|
||||
ret = split_create(&split, fname, OPT_split_size, size, true);
|
||||
if (ret) return NULL;
|
||||
|
||||
// force create first file
|
||||
u32 scnt = 0;
|
||||
int fd = split_get_file(&split, 0, &scnt, 0);
|
||||
if (fd<0) {
|
||||
printf("ERROR creating file\n");
|
||||
sleep(2);
|
||||
split_close(&split);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
part = wbfs_open_partition(
|
||||
split_read_sector,
|
||||
split_write_sector,
|
||||
&split, fat_sector_size, n_sector, 0, 1);
|
||||
if (!part) {
|
||||
split_close(&split);
|
||||
}
|
||||
return part;
|
||||
}
|
||||
|
||||
void Wbfs_Fat::mk_title_txt(struct discHdr *header, char *path)
|
||||
{
|
||||
char fname[MAX_FAT_PATH];
|
||||
FILE *f;
|
||||
|
||||
strcpy(fname, path);
|
||||
strcat(fname, "/");
|
||||
mk_gameid_title(header, fname+strlen(fname), 1, 0);
|
||||
strcat(fname, ".txt");
|
||||
|
||||
f = fopen(fname, "wb");
|
||||
if (!f) return;
|
||||
fprintf(f, "%.6s = %.64s\n", header->id, get_title(header));
|
||||
fclose(f);
|
||||
printf("Info file: %s\n", fname);
|
||||
}
|
||||
|
||||
void Wbfs_Fat::mk_gameid_title(struct discHdr *header, char *name, int re_space, int layout)
|
||||
{
|
||||
int i, len;
|
||||
char title[65];
|
||||
char id[8];
|
||||
|
||||
memcpy(name, header->id, 6);
|
||||
name[6] = 0;
|
||||
strncpy(title, get_title(header), sizeof(title));
|
||||
title_filename(title);
|
||||
|
||||
if (layout == 0) {
|
||||
sprintf(name, "%s_%s", id, title);
|
||||
} else {
|
||||
sprintf(name, "%s [%s]", title, id);
|
||||
}
|
||||
|
||||
// replace space with '_'
|
||||
if (re_space) {
|
||||
len = strlen(name);
|
||||
for (i = 0; i < len; i++) {
|
||||
if(name[i]==' ') name[i] = '_';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Wbfs_Fat::title_filename(char *title)
|
||||
{
|
||||
int i, len;
|
||||
// trim leading space
|
||||
len = strlen(title);
|
||||
while (*title == ' ') {
|
||||
memmove(title, title+1, len);
|
||||
len--;
|
||||
}
|
||||
// trim trailing space - not allowed on windows directories
|
||||
while (len && title[len-1] == ' ') {
|
||||
title[len-1] = 0;
|
||||
len--;
|
||||
}
|
||||
// replace silly chars with '_'
|
||||
for (i=0; i<len; i++) {
|
||||
if(strchr(invalid_path, title[i]) || iscntrl((int) title[i])) {
|
||||
title[i] = '_';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Wbfs_Fat::is_gameid(char *id)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<6; i++) {
|
||||
if (!isalnum((u32) id[i])) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int Wbfs_Fat::GetFragList(u8 *id)
|
||||
{
|
||||
char fname[1024];
|
||||
char fname1[1024];
|
||||
struct stat st;
|
||||
FragList *fs = NULL;
|
||||
FragList *fa = NULL;
|
||||
FragList *fw = NULL;
|
||||
int ret;
|
||||
int i;
|
||||
int is_wbfs = 0;
|
||||
int ret_val = -1;
|
||||
|
||||
ret = FindFilename(id, fname, sizeof(fname));
|
||||
if (!ret) return -1;
|
||||
|
||||
if (strcasecmp(strrchr(fname,'.'), ".wbfs") == 0) {
|
||||
is_wbfs = 1;
|
||||
}
|
||||
|
||||
fs = (FragList *) malloc(sizeof(FragList));
|
||||
fa = (FragList *) malloc(sizeof(FragList));
|
||||
fw = (FragList *) malloc(sizeof(FragList));
|
||||
|
||||
frag_init(fa, MAX_FRAG);
|
||||
|
||||
for (i=0; i<10; i++) {
|
||||
frag_init(fs, MAX_FRAG);
|
||||
if (i > 0) {
|
||||
fname[strlen(fname)-1] = '0' + i;
|
||||
if (stat(fname, &st) == -1) break;
|
||||
}
|
||||
strcpy(fname1, fname);
|
||||
if ((ret = GetFragList((char *) &fname, &_frag_append, fs)))
|
||||
{
|
||||
ret_val = ret;
|
||||
goto out;
|
||||
}
|
||||
frag_concat(fa, fs);
|
||||
}
|
||||
frag_list = (FragList *) malloc(sizeof(FragList));
|
||||
frag_init(frag_list, MAX_FRAG);
|
||||
if (is_wbfs) {
|
||||
// if wbfs file format, remap.
|
||||
//printf("=====\n");
|
||||
wbfs_disc_t *d = OpenDisc(id);
|
||||
if (!d) goto out;
|
||||
frag_init(fw, MAX_FRAG);
|
||||
ret = wbfs_get_fragments(d, &_frag_append, fw);
|
||||
if (ret) goto out;
|
||||
CloseDisc(d);
|
||||
// DEBUG: frag_list->num = MAX_FRAG-10; // stress test
|
||||
ret = frag_remap(frag_list, fw, fa);
|
||||
if (ret) goto out;
|
||||
} else {
|
||||
// .iso does not need remap just copy
|
||||
//printf("fa:\n");
|
||||
memcpy(frag_list, fa, sizeof(FragList));
|
||||
}
|
||||
|
||||
ret_val = 0;
|
||||
|
||||
out:
|
||||
if (ret_val) {
|
||||
// error
|
||||
SAFE_FREE(frag_list);
|
||||
}
|
||||
SAFE_FREE(fs);
|
||||
SAFE_FREE(fa);
|
||||
SAFE_FREE(fw);
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
int Wbfs_Fat::GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs)
|
||||
{
|
||||
return _FAT_get_fragments(filename, append_fragment, fs);
|
||||
}
|
||||
|
||||
bool Wbfs_Fat::ShowFreeSpace(void)
|
||||
{
|
||||
return false;
|
||||
}
|
64
source/usbloader/wbfs/wbfs_fat.h
Normal file
64
source/usbloader/wbfs/wbfs_fat.h
Normal file
@ -0,0 +1,64 @@
|
||||
#ifndef _WBFS_FAT_H
|
||||
#define _WBFS_FAT_H
|
||||
|
||||
#include <ogcsys.h>
|
||||
|
||||
#include "usbloader/splits.h"
|
||||
#include "wbfs_base.h"
|
||||
|
||||
class Wbfs_Fat : public Wbfs
|
||||
{
|
||||
public:
|
||||
Wbfs_Fat(u32 device, u32 lba, u32 size);
|
||||
~Wbfs_Fat();
|
||||
|
||||
virtual s32 Open();
|
||||
wbfs_disc_t* OpenDisc(u8 *);
|
||||
void CloseDisc(wbfs_disc_t *);
|
||||
|
||||
s32 GetCount(u32 *);
|
||||
s32 GetHeaders(struct discHdr *, u32, u32);
|
||||
|
||||
s32 AddGame();
|
||||
s32 RemoveGame(u8 *);
|
||||
|
||||
s32 DiskSpace(f32 *, f32 *);
|
||||
|
||||
s32 RenameGame(u8 *, const void *);
|
||||
s32 ReIDGame(u8 *, const void *);
|
||||
|
||||
f32 EstimateGameSize();
|
||||
|
||||
int GetFragList(u8 *);
|
||||
virtual int GetFragList(char *, _frag_append_t, FragList *);
|
||||
virtual bool ShowFreeSpace(void);
|
||||
|
||||
protected:
|
||||
static char wbfs_fs_drive[16];
|
||||
private:
|
||||
split_info_t split;
|
||||
|
||||
static u32 fat_sector_size;
|
||||
static char wbfs_fat_dir[16];
|
||||
static char invalid_path[];
|
||||
static struct discHdr *fat_hdr_list;
|
||||
static u32 fat_hdr_count;
|
||||
|
||||
wbfs_t* OpenPart(char *fname);
|
||||
void ClosePart(wbfs_t* part);
|
||||
wbfs_t* CreatePart(u8 *id, char *path);
|
||||
int FindFilename(u8 *id, char *fname, int len);
|
||||
void Filename(u8 *id, char *fname, int len, char *path);
|
||||
bool CheckLayoutB(char *fname, int len, u8* id, char *fname_title);
|
||||
s32 GetHeadersCount();
|
||||
void GetDir(struct discHdr *header, char *path);
|
||||
|
||||
void mk_title_txt(struct discHdr *header, char *path);
|
||||
void mk_gameid_title(struct discHdr *header, char *name, int re_space, int layout);
|
||||
void title_filename(char *title);
|
||||
bool is_gameid(char *id);
|
||||
|
||||
static int nop_rw_sector(void *_fp, u32 lba, u32 count, void* buf) { return 0; }
|
||||
};
|
||||
|
||||
#endif //_WBFS_FAT_H
|
28
source/usbloader/wbfs/wbfs_ntfs.cpp
Normal file
28
source/usbloader/wbfs/wbfs_ntfs.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
#include "wbfs_ntfs.h"
|
||||
#include "fatmounter.h"
|
||||
#include "libntfs/ntfs.h"
|
||||
|
||||
s32 Wbfs_Ntfs::Open()
|
||||
{
|
||||
strcpy(wbfs_fs_drive, "NTFS:");
|
||||
return MountNTFS(lba);
|
||||
}
|
||||
|
||||
int Wbfs_Ntfs::GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs)
|
||||
{
|
||||
int ret = _NTFS_get_fragments(filename, append_fragment, fs);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// offset to start of partition
|
||||
for (unsigned int j=0; j<fs->num; j++) {
|
||||
fs->frag[j].sector += fs_ntfs_sec;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool Wbfs_Ntfs::ShowFreeSpace(void)
|
||||
{
|
||||
return true;
|
||||
}
|
17
source/usbloader/wbfs/wbfs_ntfs.h
Normal file
17
source/usbloader/wbfs/wbfs_ntfs.h
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef _WBFS_NTFS_H
|
||||
#define _WBFS_NTFS_H
|
||||
|
||||
#include "wbfs_fat.h"
|
||||
|
||||
class Wbfs_Ntfs : public Wbfs_Fat
|
||||
{
|
||||
public:
|
||||
Wbfs_Ntfs(u32 device, u32 lba, u32 size) : Wbfs_Fat(device, lba, size) {}
|
||||
|
||||
virtual s32 Open();
|
||||
|
||||
int GetFragList(char *filename, _frag_append_t append_fragment, FragList *fs);
|
||||
bool ShowFreeSpace(void);
|
||||
};
|
||||
|
||||
#endif //_WBFS_NTFS_H
|
159
source/usbloader/wbfs/wbfs_rw.cpp
Normal file
159
source/usbloader/wbfs/wbfs_rw.cpp
Normal file
@ -0,0 +1,159 @@
|
||||
#include <ogcsys.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#include "usbloader/sdhc.h"
|
||||
#include "usbloader/usbstorage.h"
|
||||
#include "usbloader/wdvd.h"
|
||||
#include "wbfs_base.h"
|
||||
|
||||
/* Constants */
|
||||
#define MAX_NB_SECTORS 32
|
||||
|
||||
s32 Wbfs::__ReadDVD(void *fp, u32 lba, u32 len, void *iobuf) {
|
||||
void *buffer = NULL;
|
||||
|
||||
u64 offset;
|
||||
u32 mod, size;
|
||||
s32 ret;
|
||||
|
||||
/* Calculate offset */
|
||||
offset = ((u64)lba) << 2;
|
||||
|
||||
/* Calcualte sizes */
|
||||
mod = len % 32;
|
||||
size = len - mod;
|
||||
|
||||
/* Read aligned data */
|
||||
if (size) {
|
||||
ret = WDVD_UnencryptedRead(iobuf, size, offset);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Read non-aligned data */
|
||||
if (mod) {
|
||||
/* Allocate memory */
|
||||
buffer = memalign(32, 0x20);
|
||||
if (!buffer)
|
||||
return -1;
|
||||
|
||||
/* Read data */
|
||||
ret = WDVD_UnencryptedRead(buffer, 0x20, offset + size);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
/* Copy data */
|
||||
void *ptr = ((u8 *) iobuf) + size;
|
||||
memcpy(ptr, buffer, mod);
|
||||
}
|
||||
|
||||
/* Success */
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
/* Free memory */
|
||||
if (buffer)
|
||||
free(buffer);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 Wbfs::__ReadUSB(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do reads */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Read sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* USB read */
|
||||
ret = USBStorage_ReadSectors(lba + cnt, sectors, ptr);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs::__WriteUSB(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do writes */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Write sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* USB write */
|
||||
ret = USBStorage_WriteSectors(lba + cnt, sectors, ptr);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs::__ReadSDHC(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do reads */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Read sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* SDHC read */
|
||||
ret = SDHC_ReadSectors(lba + cnt, sectors, ptr);
|
||||
if (!ret)
|
||||
return -1;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs::__WriteSDHC(void *fp, u32 lba, u32 count, void *iobuf) {
|
||||
u32 cnt = 0;
|
||||
s32 ret;
|
||||
|
||||
/* Do writes */
|
||||
while (cnt < count) {
|
||||
void *ptr = ((u8 *)iobuf) + (cnt * sector_size);
|
||||
u32 sectors = (count - cnt);
|
||||
|
||||
/* Write sectors is too big */
|
||||
if (sectors > MAX_NB_SECTORS)
|
||||
sectors = MAX_NB_SECTORS;
|
||||
|
||||
/* SDHC write */
|
||||
ret = SDHC_WriteSectors(lba + cnt, sectors, ptr);
|
||||
if (!ret)
|
||||
return -1;
|
||||
|
||||
/* Increment counter */
|
||||
cnt += sectors;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
204
source/usbloader/wbfs/wbfs_wbfs.cpp
Normal file
204
source/usbloader/wbfs/wbfs_wbfs.cpp
Normal file
@ -0,0 +1,204 @@
|
||||
#include "wbfs_wbfs.h"
|
||||
#include "settings/cfg.h"
|
||||
|
||||
extern u32 sector_size;
|
||||
|
||||
s32 Wbfs_Wbfs::Open()
|
||||
{
|
||||
wbfs_t *part = NULL;
|
||||
|
||||
/* Open partition */
|
||||
part = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 0);
|
||||
if (!part) return -1;
|
||||
|
||||
/* Close current hard disk */
|
||||
Close();
|
||||
hdd = part;
|
||||
|
||||
// Save the new sector size, so it will be used in read and write calls
|
||||
sector_size = 1 << hdd->head->hd_sec_sz_s;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
wbfs_disc_t* Wbfs_Wbfs::OpenDisc(u8 *discid)
|
||||
{
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return NULL;
|
||||
|
||||
/* Open disc */
|
||||
return wbfs_open_disc(hdd, discid);
|
||||
}
|
||||
|
||||
void Wbfs_Wbfs::CloseDisc(wbfs_disc_t *disc)
|
||||
{
|
||||
/* No device open */
|
||||
if (!hdd || !disc)
|
||||
return;
|
||||
|
||||
/* Close disc */
|
||||
wbfs_close_disc(disc);
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::Format()
|
||||
{
|
||||
wbfs_t *partition = NULL;
|
||||
|
||||
/* Reset partition */
|
||||
partition = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 1);
|
||||
if (!partition)
|
||||
return -1;
|
||||
|
||||
/* Free memory */
|
||||
wbfs_close(partition);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::GetCount(u32 *count)
|
||||
{
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Get list length */
|
||||
*count = wbfs_count_discs(hdd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len)
|
||||
{
|
||||
u32 idx, size;
|
||||
s32 ret;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
for (idx = 0; idx < cnt; idx++) {
|
||||
u8 *ptr = ((u8 *)outbuf) + (idx * len);
|
||||
|
||||
/* Get header */
|
||||
ret = wbfs_get_disc_info(hdd, idx, ptr, len, &size);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::AddGame()
|
||||
{
|
||||
s32 ret;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Add game to device */
|
||||
partition_selector_t part_sel;
|
||||
int copy_1_1 = 0;
|
||||
|
||||
if (Settings.fullcopy) {
|
||||
part_sel = ALL_PARTITIONS;
|
||||
copy_1_1 = 1;
|
||||
} else {
|
||||
part_sel = Settings.partitions_to_install == install_game_only ? ONLY_GAME_PARTITION : ALL_PARTITIONS;
|
||||
}
|
||||
|
||||
ret = wbfs_add_disc(hdd, __ReadDVD, NULL, Spinner, part_sel, copy_1_1);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::RemoveGame(u8 *discid)
|
||||
{
|
||||
s32 ret;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Remove game from USB device */
|
||||
ret = wbfs_rm_disc(hdd, discid);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::DiskSpace(f32 *used, f32 *free)
|
||||
{
|
||||
f32 ssize;
|
||||
u32 cnt;
|
||||
|
||||
/* No device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
|
||||
/* Count used blocks */
|
||||
cnt = wbfs_count_usedblocks(hdd);
|
||||
|
||||
/* Sector size in GB */
|
||||
ssize = hdd->wbfs_sec_sz / GB_SIZE;
|
||||
|
||||
/* Copy values */
|
||||
*free = ssize * cnt;
|
||||
*used = ssize * (hdd->n_wbfs_sec - cnt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::RenameGame(u8 *discid, const void *newname)
|
||||
{
|
||||
s32 ret;
|
||||
|
||||
/* No USB device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
ret = wbfs_ren_disc(hdd, discid,(u8*)newname);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 Wbfs_Wbfs::ReIDGame(u8 *discid, const void *newID)
|
||||
{
|
||||
s32 ret;
|
||||
|
||||
/* No USB device open */
|
||||
if (!hdd)
|
||||
return -1;
|
||||
ret = wbfs_rID_disc(hdd, discid,(u8*)newID);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
f32 Wbfs_Wbfs::EstimateGameSize()
|
||||
{
|
||||
partition_selector_t part_sel = ONLY_GAME_PARTITION;
|
||||
if (Settings.fullcopy) {
|
||||
part_sel = ALL_PARTITIONS;
|
||||
} else {
|
||||
switch(Settings.partitions_to_install)
|
||||
{
|
||||
case install_game_only:
|
||||
part_sel = ONLY_GAME_PARTITION;
|
||||
break;
|
||||
case install_all:
|
||||
part_sel = ALL_PARTITIONS;
|
||||
break;
|
||||
case install_all_but_update:
|
||||
part_sel = REMOVE_UPDATE_PARTITION;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return wbfs_estimate_disc(hdd, __ReadDVD, NULL, part_sel);
|
||||
}
|
31
source/usbloader/wbfs/wbfs_wbfs.h
Normal file
31
source/usbloader/wbfs/wbfs_wbfs.h
Normal file
@ -0,0 +1,31 @@
|
||||
#ifndef _WBFS_WBFS_H
|
||||
#define _WBFS_WBFS_H
|
||||
|
||||
#include "wbfs_base.h"
|
||||
#include "libwbfs/libwbfs.h"
|
||||
|
||||
class Wbfs_Wbfs : public Wbfs
|
||||
{
|
||||
public:
|
||||
Wbfs_Wbfs(u32 device, u32 lba, u32 size) : Wbfs(device, lba, size) {}
|
||||
|
||||
s32 Open();
|
||||
wbfs_disc_t* OpenDisc(u8 *);
|
||||
void CloseDisc(wbfs_disc_t *);
|
||||
|
||||
s32 Format();
|
||||
s32 GetCount(u32 *);
|
||||
s32 GetHeaders(struct discHdr *, u32, u32);
|
||||
|
||||
s32 AddGame();
|
||||
s32 RemoveGame(u8 *);
|
||||
|
||||
s32 DiskSpace(f32 *, f32 *);
|
||||
|
||||
s32 RenameGame(u8 *, const void *);
|
||||
s32 ReIDGame(u8 *, const void *);
|
||||
|
||||
f32 EstimateGameSize();
|
||||
};
|
||||
|
||||
#endif //_WBFS_WBFS_H
|
@ -1,19 +0,0 @@
|
||||
#ifndef _WBFS_FAT_H
|
||||
#define _WBFS_FAT_H
|
||||
|
||||
wbfs_t* WBFS_FAT_OpenPart(char *fname);
|
||||
void WBFS_FAT_ClosePart(wbfs_t* part);
|
||||
s32 WBFS_FAT_GetCount(u32 *count);
|
||||
s32 WBFS_FAT_GetHeaders(void *outbuf, u32 cnt, u32 len);
|
||||
wbfs_disc_t* WBFS_FAT_OpenDisc(u8 *discid);
|
||||
void WBFS_FAT_CloseDisc(wbfs_disc_t* disc);
|
||||
s32 WBFS_FAT_DiskSpace(f32 *used, f32 *free);
|
||||
s32 WBFS_FAT_RemoveGame(u8 *discid);
|
||||
s32 WBFS_FAT_AddGame(void);
|
||||
s32 WBFS_FAT_DVD_Size(u64 *comp_size, u64 *real_size);
|
||||
int WBFS_FAT_find_fname(u8 *id, char *fname, int len);
|
||||
s32 WBFS_FAT_RenameGame(u8 *discid, const void *newname);
|
||||
s32 WBFS_FAT_ReIDGame(u8 *discid, const void *newID);
|
||||
s32 WBFS_FAT_EstimateGameSize(void);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user