Compare commits

...

16 Commits

Author SHA1 Message Date
dimok789 53f7aab136 Forwarder:
- fixed endless waiting for slow HDD (now really 10 secs timeout)
- added missing ext2 unmount
Thanks to FIX94 for pointing at those two bugs.
2012-04-21 21:02:36 +00:00
dimok789 1c150901e4 Forwader:
- fix crash on drives with physical sector size > 512 bytes
2012-04-21 09:13:08 +00:00
dimok321 a661109541 Forgot to remove two unneeded files 2011-07-25 17:57:06 +00:00
dimok321 61fd18e438 USB Loader GX
*Properly sync video after flush to avoid possible green flash
*Moved argument command line also to mem2 to avoid overwrite of it

Forwarder V4:
*Changed to new app_booter method (see WiiXplorer SVN)
*Properly sync video after flush to avoid possible green flash
*Centered background image and corrected aspect ratio
2011-07-25 17:50:03 +00:00
dimok321 1618b4b1e0 USB Loader GX Release V2.2
New:
- Added game categories and filter games list by categories (Can be imported from WiiTDB).
- Wiinertag support.
- Supporting arguments from meta.xml on boot (--ios=xxx and --usbport=x) (Requires Homebrew Channel 1.0.7+ or 
  UNEO Forwarder v3.0).
- New ehci modules by Rodries with better drive compatibility.
- Added two new video modes to force progressive video mode, 'FORCE PAL480p' and 'FORCE NTSC480p'.
- Added Sneek Video Patch mode.
- Added new 'Inherit' setting for game settings named "Use global". If that option is set then the main loader 
  setting is used.
- Full d2x cIOS support with it's new features (Block IOS Reload, Return To, Sector Sizes > 512).
- Support for sector sizes > 512B with FAT32/NTFS (Requires d2x v6+)
- Real support for simultanious use of both USB ports without switching the 2nd drive temporary off. (Requires 
  Hermes cIOS or Rodries MOD of the Hermes cIOS (recommended))
- Added two new settings menus
- Added saving of game browser position when returning to USB Loader GX

Changes:
- Improved several GUI controls/navigations
- Changed settings menu layout and sorted the items to their correct place (HDD menu, features menu)
- Set games settings to use the global setting by default, set to "use global" to use the main loader settings.
- Use TinyXML instead of MXML (better XML support)
- Updated to new libs (libogc, libfat, libext2fs, libntfs)

Fix:  
- "Return to" option now work for all games, even problematic games like Prince of Persia. (Requires d2x v4+)
- Xflip setting fixed.
- Fix the parental lock of Individual game settings (Thanks to NJ7)
- Fix Theme downloader
- Fixed reset of the loader when loading game with IOS reload and disabled WiiTDB titles
- Fixed timeout timer on startup to count correctly.
- Fixed reversed disc image download when Custom/Original option is selected
- Fixed reload of game list after a game rename
- Fixed horizontal text scrolling
- Fixed booting games by arguments (headless id feature)
- Fixed We Dare game boot (thx oggzee)



R1099 Change Log:
    *Added IOS225 from Rodries cIOS Installer MOD to Hermes IOS types

New Forwarder V3.0 Changes:
    *added support for ext partitions
    *added support for arguments from xml
    *clean up of source
2011-06-29 20:45:40 +00:00
dimok321 72c39f8cab *Moved every allocation of libntfs now to MEM2 (in mem1 it gets overwritten and so the games didn't work in last rev)
Forwarder change:
*Ignore MBR partition type and read partition type from boot record sector
(Channel will follow later)
2011-01-08 14:26:13 +00:00
dimok321 7e0e4cab5c *Added back the trNOOP (which excluded a lot of settings languages) which i removed by mistake when adding themes
*Added option for file splitting on install. 2GB, 4GB and on ntfs/ext2/3/4 partitions no splitting at all option.
*Fixed the install dir naming patterns option for fat32/ntfs/ext2/3/4 game installs
*Changed/Fixed Home Menu exit to loader / shutdown
*Added reload of game list on SD button click
*Fixed language file loading on startup
*Changed browse for theme path to file browser instead of OnScreenKeyboard

Several settings were changed in this revision. It is recommended to reset the configs before using this rev.


Forwarder Channel Update:
*Use of IOS58 and AHBPROT
*Complete change of forwarder. Using same as on WiiXplorer now.
*Looking for dol in every primary fat/ntfs partition in the known paths (/apps/usbloader_gx/ and /apps/usbloadergx/). (Booting loader from ntfs will be usefull once images and settings can also be stored on ntfs.)

Here is a download link for the channel:
http://www.mediafire.com/?r11bwt1occlanmk

The channel will be uploaded to the download section later when it is thoroughly tested.
2010-12-29 15:42:26 +00:00
dimok321 c922f1b92d *Revert to R883 and only keeping the new game directory layouts commited by r-win
*Moved R896 to the branch
2010-01-19 10:48:50 +00:00
dimok321 124c3f05ed Forwarder changes:
*Fixed Codedumps from Preload
*Fixed USB not working
*Changed back to old LoadMii dolloader (which is working with preloader too now)
2009-06-15 23:11:36 +00:00
dimok321 02d53a5e09 *Fixed some issues
*Added 16:9 forwarder
*Changed video mode change behaviour
*Added new GameSetting "Online fix"

NOTE: Online fix is ONLY needed if you initialize network inside the loader and start an Online Game and ONLY if your boot cios is the same as GameSettings IOS (which is default). That Game would need an IOS Reload before start to be able to play it online BUT this IOS Reload mostly causes Blackscreens. I made this option so you dont have to avoid initializing network. If you have different boot IOS than gamesettings IOS this fix doesnt matter too.
2009-06-14 10:08:41 +00:00
dimok321 70d8b4f4a4 *Made forwarder Preloader compatible thanks to SpaceJump (only for DOLs though) 2009-06-13 22:26:43 +00:00
ardi@ist-einmalig.de 6c7e7a2a03 little fix 2009-06-09 23:02:58 +00:00
ardi@ist-einmalig.de e9423c807e makes the forwarder fit for loading the "USB Loader GX" from USB-Device
Strategy to find the boot.dol from "USB Loader GX":

1. looking for "/config/GXGlobal.cfg" first on "SD:/" and then on "USB:/"
2.1. when cfg is found and update_path is set, then searches for "boot.dol"/"boot.elf" in "update_path"
2.2. when cfg isn't found or update_path isn't set, then looking for "boot.dol"/"boot.elf" in "apps/usbloader_gx/" first on "SD:/" and then on "USB:/" 
3. if the Loader is found, then LOAD and RUN it. Otherwise exits the for-warder

Primarily searched on SD-Card. This makes easier to test new versions.
2009-06-09 18:26:47 +00:00
dimok321 11e17e07ab *Reverted giantpunes work on forwarder source and added mine (worked parallel didnt know he was doing it) | added mine because its bit more clean and got a check if the CFG file doesnt exist 2009-05-30 21:45:59 +00:00
giantpune b4ba424be0 now the dol looks for the update path in the GXglobal file and uses it instead of the default path. 2009-05-30 20:21:49 +00:00
dimok321 d27dcc314b *Added Forwarder source to the Branch 2009-05-30 17:33:35 +00:00
217 changed files with 2307 additions and 34516 deletions

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<app version="1">
<name>USB Loader GX</name>
<coder>USB Loader GX Team</coder>
<version>1.0</version>
<release_date>20090118030000</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. Features are automatic widescreen detection, coverdownload, parental control, theme support and many more.
Coders: dimok/nIxx/cyrex/giantpune/Hungyip84/NeoRame/WiiShizzza/ardi.</long_description>
</app>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -1,173 +0,0 @@
Specialthanksto = Special tak til
Favorite = Favorit
t3Coverst = 3D Covers
AppLanguage = Program Sprog
Areyousure = Er du sikker?
AutoPatch = AutoPatch
Keyboard = Tastatur
Back = Tilbage
Backgroundmusic = Baggrunds musik
BacktoHBCorWiiMenu = Tilbage til HBC eller Wii Menu
BacktoLoader = Tilbage til Loaderen
BacktoWiiMenu = Tilbage til HBC
BootStandard = Boot/Standard
BothBoth = Begge
Cantcreatedirectory = Kan ikke lave ny mappe
Cancel = Annullere
Cantbeformated = Kan ikke formatteres
Cantdelete = Kan ikke slettes:
ClicktoDownloadCovers = Klik for at Downloade Covers
Clock = Klokke
Continueinstallgame = Vil du blive ved med at installere spillet?
ConsoleDefault = Konsol Standard
Consoleshouldbeunlockedtomodifyit = Konsol skal være låst op for ændre dette.
ConsoleLocked = Konsol låst
CorrectPassword = Korrekt Password
Couldnotinitializenetwork = Kunne ikke initialisere netværk!
CouldnotopenDisc = Kunne ikke åbne dvd
CouldnotinitializeDIPmodule = Kunne ikke initialisere DIP module!
CoverDownload = Cover Download
CoverPath = Cover Sti
CoverpathChanged = CoverSti Ændret
Coverpathchange = CoverSti Ændringer
Credits = Lavet af:
DiscImages = Dvdbilleder
DiscimagePath = Dvdbilleder sti
DiscpathChanged = DvdSti Ændret
Discpathchange = DvdSti ændringer
DiscDefault = Spillets standard
Display = Skærm
Doyouwanttoformat = Vil du formattere?:
Doyoureallywanttodelete = Vil du virkelig slette:
Doyouwanttoretryfor30secs = Vil du prøve igen?
Downloadingfile = Downloader fil:
DownloadBoxartimage = Downloade Boxart billede?
Downloadfinished = Download færdig
Error = Fejl!
BOOTERROR = BOOT FEJL
ErrorreadingDisc = Disken kunne ikke læses
ExitUSBISOLoader = Afslut USB Loader GX?
InitializingNetwork = Initialiserer Netværk
InsertDisk = Indsæt en disk
InsertaWiiDisc = Indsæt en wii disk!
InsertaSDCardtodownloadimages = Indsæt et sd kort for at downloade billeder.
InsertaSDCardtosave = Indsæt et sd kort for at gemme.
InstallRenameandDeleteareunlocked = Alle USB Loader GX's funktioner er låst op.
Installerror = Installations fejl!
Installagame = Installer et spil?
Installinggame = Installerer spillet:
Failedtoboot = Kunne ikke start op:
FailedtomountfrontSDcard = Kunne ikke montere sd kort
FailedtosetUSB = Kunne ikke sætte usb:
Failedformating = Formatteringen mislykkedes
filesnotfoundontheserver = Filerne blev ikke fundet på serveren!
filesleft = Fil(er) tilbage
FlipX = Flip-X
Force = Tving
Youneedtoformatapartition = Du må formattere en partition
Format = Format
Formattingpleasewait = Formatterer, vent venligst...
formated = Formatteret!
free = ledig
FreeSpace = Ledig plads
FullShutdown = Fuld shutdown
GameID = Spil ID
Games = Spil
Gameisalreadyinstalled = Dette spil er allerede installeret:
GameRegion = Region
GameSize = Spil størrelse
GoBack = Gå tilbage
//GotoPage = Gå til side
HowtoShutdown = Hvordan skal den slukkes?
Language = Sprog
Langchange = Sprog skift
Left = Venstre
LikeSysMenu = Ligesom wii menu
LoadingincIOS = Loader i cIOS249
Lock = Lås
LockConsole = Lås Konsol
MP3Menu = MP3 Menu
Missingfiles = Manglende filer
Networkiniterror = Netværket kunne ikke intialiseres
Next = Næste
No = Nej
Nofilemissing = Ingen filer mangler!
NoHDDfound = Ingen HDD fundet!
NoSDcardinserted = Intet SD-kort fundet!
Nopartitionsfound = Ingen partitioner fundet
NoUSBDevice = Intet USB apparat tilsluttet
NoWBFSpartitionfound = Ingen WBFS partition fundet
NormalCovers = Normale Covers
Normal = Normal
NotaWiiDisc = Ikke en Wii Disk
NoUSBDevicefound = Intet USB apparat fundet.
Notenoughfreespace = Ikke nok ledig plads!
notset = Ikke sat
of = af
OFF = Fra
OfficialSite = Officielle Side
ok = OK
ON = Til
Parentalcontrol = Forælder kontrol
Partition = Partition
Password = Password
PasswordChanged = Password Ændret
Passwordhasbeenchanged = Passwordet er blevet ændret
Passwordchange = Password skift
PowerofftheWii = Sluk wii'en
Prev = Forrig
PromptsButtons = Prompts Buttons
ReloadSD = Genindlæs SD
RenameGameonWBFS = Omdøb spil på WBFS
Restart = Genstart
Return = Tilbage
ReturntoWii = Vend tilbage til menuen
Right = Højre
Rumble = Vibration
QuickBoot = Hurtig opstart
Save = Gem
SaveFailed = Gemningen mislykkedes
Specialthanksto = Speciel tak til
For = for
theUSBLoaderandreleasingthesourcecodethe = og for at gøre deres source code tilgængelig
secondsleft = Sekunder tilbage
SelectthePartition = Vælg Partitionen
youwanttoformat = du vil formatter
settings = Indstillinger
ShutdowntoIdle = Almindeligt
ShutdownSystem = Sluk Totalt(Rødt lys)
Success = Succes:
Successfullyinstalled = Installationen lykkedes:
Successfullydeleted = Sletningen lykkedes:
SuccessfullySaved = Successfully Saved:
SystemDefault = System standard
ThemePath = TemaSti
ThemepathChanged = TemaSti ændret
Themepathchange = TemaSti æmdringer
Try = Prøv
Tooltips = Værktøjtips
Timeleft = Tid tilbage:
Unlock = Lås op
Uninstall = Afinstaller
USBLoaderisprotected = USB Loader GX er beskyttet
USBapparatnotfound = USB apparat ikke fundet
VideoMode = Video Mode
VIDTVPatch = VIDTV Patch
Volume = Lydstyrke
Waiting = Venter.....
WaitingforUSBapparat = Venter på USB apparat
WidescreenFix = Widescreen Fix
WiiMenu = Wii Menu
WrongPassword = Forkert Password
Yes = Ja
YoudonthavecIOS = Du har ikke cIOS222
Japanese = Japansk
German = Tysk
English = Engelsk
French = Fransk
Spanish = Spansk
Italian = Italiensk
Dutch = Nederlandsk
SChinese = Simpelt Kinesisk
TChinese = Tradionelt Kinesisk
Korean = Koreansk

View File

@ -1,171 +0,0 @@
Specialthanksto = Speciale dank aan
t3Covers = 3D hoesjes
AppLanguage = Applicatietaal
Areyousure = Zeker weten?
AutoPatch = Automatisch patchen
Back = Terug
BacktoHBCorWiiMenu = Naar HBC of Wiimenu
BacktoLoader = Naar Loader
BacktoWiiMenu = Terug naar Wiimenu
BootStandard = Boot/Standaard
BothBoth = Beide
Cantcreatedirectory = Kan map niet maken
Cancel = Annuleren
Cantbeformated = Kan niet formatteren
Cantdelete = Kan niet verwijderen:
ClicktoDownloadCovers = Klik om hoesjes te downloaden
Clock = Klok
Continueinstallgame = Installatie van spel voortzetten?
ConsoleDefault = Consolestandaard
Consoleshouldbeunlockedtomodifyit = Aanpassen vereist vrijgeven console
ConsoleLocked = Console op slot
CorrectPassword = Correct wachtwoord
Couldnotinitializenetwork = Netwerk kan niet worden ingesteld
CouldnotopenDisc = Schijf kan niet worden geopend
CouldnotinitializeDIPmodule = DIP module kan niet worden ingesteld
CoverDownload = Hoesjes downloaden
CoverPath = Hoesjesmap
CoverpathChanged = Hoesjesmap gewijzigd
Coverpathchange = Hoesjesmap wijzigen
Credits = Credits
DiscImages = Discplaatjes
DiscimagePath = Discplaatjesmap
DiscpathChanged = Discplaatjesmap gewijzigd
Discpathchange = Discplaatjesmap wijzigen
DiscDefault = Discstandaard
Display = Weergeven
Doyouwanttoformat = Wil je dit formatteren:
Doyoureallywanttodelete = Wil je dit echt verwijderen:
Doyouwanttoretryfor30secs = 30 seconden lang opnieuw proberen?
Downloadingfile = Bezig met downloaden:
DownloadBoxartimage = Hoesjes downloaden?
Downloadfinished = Downloaden voltooid
Error = Fout!
BOOTERROR = BOOT FOUT
ErrorreadingDisc = Fout tijdens lezen van disc
ExitUSBISOLoader = USB Loader GX afsluiten?
InitializingNetwork = Netwerk instellen
InsertDisk = Voer een schijf in
InsertaWiiDisc = Voer een Wiischijf in
InsertaSDCardtodownloadimages = Voer een SD-kaart in voor de plaatjes
InsertaSDCardtosave = Voor een SD-kaart in voor het opslaan
InstallRenameandDeleteareunlocked = Alle functies van de USB-loader zijn vrijgegeven
Installerror = Installatiefout
Installagame = Spel installeren
Installinggame = Bezig met installeren:
Failedtoboot = Fout tijdens laden van:
FailedtomountfrontSDcard = Kan SD-kaart niet koppelen
FailedtosetUSB = Kan USB niet instellen:
Failedformating = Formatteren mislukt
filesnotfoundontheserver = Bestanden niet gevonden op de server
filesleft = bestanden resterend:
FlipX = X wisselen
Force = Afdwingen
Youneedtoformatapartition = Je moet een partitie formatteren
Format = Formatteren
Formattingpleasewait = Bezig met formatteren, even geduld
formated = geformatteerd!
free = beschikbaar
FreeSpace = Beschikbare ruimte
FullShutdown = Volledig
GameID = Spel ID
Games = Spellen
Gameisalreadyinstalled = Spel is reeds geïnstalleerd!
GameRegion = Regio
GameSize = Spelgrootte
GoBack = Ga terug
//GotoPage = Ga naar pagina
HowtoShutdown = Op welke manier uitschakelen?
Language = Taal
Langchange = Taal wijzigen
Left = Links
LikeSysMenu = Zoals systeemmenu
LoadingincIOS = Laden in Cios249
Lock = Vergrendelen
LockConsole = Console vergrendelen
MP3Menu = MP3 Menu
Missingfiles = Ontbrekende bestanden
Networkiniterror = Network initialisatiefout
Neither = Geen
Next = Volgende
No = Nee
Nofilemissing = Alle bestanden compleet!
NoHDDfound = Geen harde schijf gevonden!
NoSDcardinserted = Geen SD-kaart gevonden!
Nopartitionsfound = Geen partities gevonden
NoUSBDevice = Geen USB-apparaat
NoWBFSpartitionfound = Geen WBFS partities gevonden
NormalCovers = Standaard hoesjes
Normal = Standaard
NotaWiiDisc = Geen Wiidisc
NoUSBDevicefound = Geen USB-apparaat gevonden
Notenoughfreespace = Onvoldoende vrije ruimte
notset = niet ingesteld
of = of
OFF = UIT
OfficialSite = Officiële site
ok = oké
ON = AAN
Parentalcontrol = Ouderlijk toezicht
Partition = Partitie
Password = Wachtwoord
PasswordChanged = Wachtwoord gewijzigsd
Passwordhasbeenchanged = Het wachtwoord is gewijzigd
Passwordchange = Wachtwoord wijzigen
PowerofftheWii = Wii uitschakelen
Prev = Vorige
PromptsButtons = Weergave knoppen
ReloadSD = SD herladen
RenameGameonWBFS = Spel hernoemen op WBFS
Restart = Herstarten
Return = Terug
ReturntoWii = Terug naar Wiimenu
Right = Rechts
Rumble = Trillen
QuickBoot = Snelstarten
Save = Opslaan
SaveFailed = Opslaan mislukt
Specialthanksto = Met speciale dank aan
For = voor
theUSBLoaderandreleasingthesourcecodethe = De USB-Loader en het vrijgeven van de broncode
secondsleft = seconden resterend
SelectthePartition = Selecteer de partitie
youwanttoformat = wil je formatteren
settings = Instellingen
ShutdowntoIdle = Slaapstand
ShutdownSystem = Systeem uitschakelen
Success = Voltooid:
Successfullyinstalled = Installatie voltooid:
Successfullydeleted = Verwijdering voltooid:
SuccessfullySaved = Opslaan voltooid:
SystemDefault = Systeemstandaard
ThemePath = Themamap
ThemepathChanged = Themamap gewijzigd
Themepathchange = Themamap gewijzigd
Try = Proberen
Tooltips = Tekstballonen
Timeleft = Tijd resterend:
Unlock = Vrijgeven
Uninstall = Deïnstalleren
USBLoaderisprotected = USB Loader GX is op slot
USBDevicenotfound = USB apparaat niet gevonden
VideoMode = Video Modus
VIDTVPatch = VIDTV Patch
Volume = Volume
Waiting = Wachten...
WaitingforUSBDevice = Wachten op USB-apparaat
WidescreenFix = Breedbeeld
WiiMenu = Wiimenu
WrongPassword = Onjuist wachtwoord
Yes = Ja
YoudonthavecIOS = cIOS222 niet geïnstalleerd
Japanese = Japans
German = Duits
English = Engels
French = Frans
Spanish = Spaans
Italian = Italiaans
Dutch = Nederlands
SChinese = SChinees
TChinese = TChinees
Korean = Koreaans

View File

@ -1,171 +0,0 @@
Specialthanksto = Erikoiskiitokset:
t3Coverst = 3D kannet
AppLanguage = Ohjelman kieli
Areyousure = Oletko varma?
AutoPatch = AutoPatch
Back = Takaisin
BacktoHBCorWiiMenu = Takaisin HBC:hen tai Wii Menuun
BacktoLoader = HBC
BacktoWiiMenu = Takaisin Wii Menuun
BootStandard = K%äynnistys/Standardi
BothBoth = Molemmat
Cantcreatedirectory = Ei voi luoda kansiota
Cancel = Peruuta
Cantbeformated = Ei voida formatoida
Cantdelete = Ei voida poistaa:
ClicktoDownloadCovers = Klikkaa ladataksesi kansia
Clock = Kello
Continueinstallgame = Jatka pelin asennusta?
ConsoleDefault = Konsolin oletus
Consoleshouldbeunlockedtomodifyit = Avaa konsolin lukitus muokataksesi asetuksia.
ConsoleLocked = Konsoli lukittu
CorrectPassword = Oikea salasana
Couldnotinitializenetwork = Verkkoon ei voitu yhdistää!
CouldnotopenDisc = Levyä ei voitu lukea
CouldnotinitializeDIPmodule = DIP Moduulia ei voitu alustaa!
CoverDownload = kansien lataus
CoverPath = kansien sijainti
CoverpathChanged = kansien sijainti muutettu
Coverpathchange = kansien sijainti
Credits = Tekij%ät
DiscImages = Levykuvat
DiscimagePath = Levykuvien sijainti
DiscpathChanged = Levykuvien sijainti muutettu
Discpathchange = Levykuvien sijainti
DiscDefault = Levy oletus
Display = N%äytt%ö
Doyouwanttoformat = Haluatko formatoida:
Doyoureallywanttodelete = Haluatko varmasti formatoida:
Doyouwanttoretryfor30secs = Haluatko odottaa 30 sekuntia?
Downloadingfile = Lataa tiedostoa:
DownloadBoxartimage = Lataa kansikuva?
Downloadfinished = Lataus valmistunut
Error = Virhe !
BOOTERROR = BOOTTAUS VIRHE
ErrorreadingDisc = Virhe luettaessa levyä
ExitUSBISOLoader = Poistu USB Loader GX:stä?
InitializingNetwork = Yhdistää verkkoon
InsertDisk = Aseta levy Wiihin
InsertaWiiDisc = Aseta Wii-levy!
InsertaSDCardtodownloadimages = Aseta SD-kortti ladataksesi kansia.
InsertaSDCardtosave = Aseta SD-kortti tallentaaksesi asetuksia.
InstallRenameandDeleteareunlocked = Kaikki asetukset on nyt käytettävissä.
Installerror = Asennusvirhe!
Installagame = Asenna peli
Installinggame = Asentaa peliä:
Failedtoboot = Käynnistys ei onnistunut:
FailedtomountfrontSDcard = Ei voinut asentaa SD-korttia
FailedtosetUSB = USB:ta ei voitu asentaa:
Failedformating = Formatointi ei onnistunut
filesnotfoundontheserver = tiedostoja ei löytynyt serveriltä!
filesleft = tiedosto(j)a jäljellä
FlipX = k%ä%änn%ä-X
Force = Pakota
Youneedtoformatapartition = Sinun täytyy formatoida osio
Format = Formatoi
Formattingpleasewait = Formatoi, odota...
formated = formatoitu!
free = vapaa
FreeSpace = Vapaata tilaa
FullShutdown = Täysi sammutus
GameID = Peli ID
Games = Pelejä
Gameisalreadyinstalled = Peli on jo asennettu:
GameRegion = Alue
GameSize = Pelin koko
GoBack = Mene takaisin
//GotoPage = Mene sivulle
HowtoShutdown = Miten sammutetaan?
Language = Kieli
Langchange = Kielen muuttaminen
Left = Vasen
LikeSysMenu = Kuin wii-menu
LoadingincIOS = Lataa cIOS249
Lock = Lukitse
LockConsole = Lukitse konsoli
MP3Menu = MP3 valikko
Missingfiles = tiedostoa puuttuu
Networkiniterror = Verkon alustusvirhe
Neither = Ei kumpikaan
Next = Seuraava
No = Ei
Nofilemissing = Ei tiedostoja kadoksissa!
NoHDDfound = Kovalevyä ei löytynyt!
NoSDcardinserted = SD-korttia ei ole asetettu wiihin!
Nopartitionsfound = Osioita ei löytynyt
NoUSBDevice = Ei USB-laitetta
NoWBFSpartitionfound = Ei WBFS-osioita löytynyt
NormalCovers = Normaalit kannet
Normal = Normaali
NotaWiiDisc = Ei Wii-levy
NoUSBDevicefound = USB-laitetta ei löytynyt.
Notenoughfreespace = Ei tarpeeksi tilaa!
notset = ei asetettu
of = josta
OFF = OFF
OfficialSite = Virallinen sivusto
ok = OK
ON = ON
Parentalcontrol = Valvonta
Partition = Osio
Password = Salasana
PasswordChanged = Salasana muutettu
Passwordhasbeenchanged = Salasana on muutettu
Passwordchange = Salasanan vaihto
PowerofftheWii = Sammuta Wii
Prev = Edellinen
PromptsButtons = Napit
ReloadSD = Uudelleenlataa SD
RenameGameonWBFS = Uudelleennimeä peli
Restart = Käynnistä uudelleen
Return = Palaa
ReturntoWii = Palaa Wii-menuun
Right = Oikea
Rumble = V%ärin%ä
QuickBoot = Pikak%äynnistys
Save = Tallenna
SaveFailed = Tallennus ei onnistunut
Specialthanksto = Erikoiskiitokset
For =
theUSBLoaderandreleasingthesourcecodethe = ja l%ähdekoodin julkaisemisesta
secondsleft = sekuntia jäljellä
SelectthePartition = Valitse osio
youwanttoformat = jonka haluat formatoida
settings = Asetukset
ShutdowntoIdle = Valmiustila
ShutdownSystem = Sammuta järjestelmä
Success = Onnistui:
Successfullyinstalled = Asennettu onnistuneesti:
Successfullydeleted = Poistettu onnistuneesti:
SuccessfullySaved = Tallennettu onnistuneesti
SystemDefault = Wiin oletus
ThemePath = Teeman sijainti
ThemepathChanged = Teeman sijainti muutettu
Themepathchange = Teeman sijainti
Try = Yrit%ä
Tooltips = vinkit
Timeleft = Aikaa jäljellä:
Unlock = Avaa
Uninstall = Poista
USBLoaderisprotected = USB Loader GX on suojattu.
USBDevicenotfound = USB-laitetta ei löytynyt
VideoMode = Video tila
VIDTVPatch = VIDTV korjaus
Volume = Voimakkuus
Waiting = Odottaa...
WaitingforUSBDevice = Odottaa USB-laitetta...
WidescreenFix = Laajakuva korjaus
WiiMenu = Wii Menu
WrongPassword = Väärä salasana
Yes = Kyllä
YoudonthavecIOS = Sinulla ei ole cIOS222:sta
Japanese = Japani
German = Saksa
English = Englanti
French = Ranska
Spanish = Espanja
Italian = Italia
Dutch = Hollanti
SChinese = SKiina
TChinese = TKiina
Korean = Korea

View File

@ -1,210 +0,0 @@
t3Covers = Jaquettes 3D
addToFavorite = Ajouter aux favoris
all = Alphabétique
AppLanguage = Langue d'interface
Areyousure = Êtes-vous sûr?
available = disponible
AutoPatch = AutoPatch
Back = Retour
Backgroundmusic = Fond sonore
Backgroundmusicpath = Dossier fond sonore modifié
BacktoHBCorWiiMenu = Retour HBC / Menu Wii
BacktoLoader = Wii HomeBrews
BacktoWiiMenu = Retour Menu Wii
BootStandard = Boot/Standard
Both = Tous
Cantcreatedirectory = Création du répertoire impossible
Cancel = Annuler
Cantbeformated = Formatage impossible
CheckingforUpdates = Recherche de Mise à Jour
Cantdelete = Impossible de supprimer :
ClicktoDownloadCovers = Téléchargement des jaquettes
Clock = Horloge
Close = Fermer
Continueinstallgame = Continuer l'installation ?
ConsoleDefault = Console par défaut
Consoleshouldbeunlockedtomodifyit = La console doit être déverrouillée.
ConsoleLocked = Console verrouillée
CorrectPassword = Mot de passe correct
Couldnotinitializenetwork = Initialisation réseau impossible !
CouldnotopenDisc = Initialisation disque impossible
CouldnotinitializeDIPmodule = Initialisation DIP impossible !
CoverDownload = Téléchargement Jaquettes
CoverPath = Dossier Jaquettes
CoverpathChanged = Dossier des jaquettes modifié
Coverpathchange = Dossier des jaquettes
count = Utilisation
Credits = Crédits
DiscImages = Labels DVD
DiscimagePath = Dossier Labels DVD
DiscpathChanged = Dossier des labels DVD changé
Discpathchange = Dossier des labels DVD
DiscDefault = Disque par défaut
Display = Affichage
Doyouwanttoformat = Voulez-vous formater ?
Doyoureallywanttodelete = Voulez-vous vraiment supprimer ?
Doyouwanttoretryfor30secs = Réessayer pendant 30 sec. ?
Doyouwanttoupdate = Comment faire la Mise à Jour ?
Downloadingfile = Téléchargement du fichier
DownloadBoxartimage = Télécharger les jaquettes ?
Downloadfinished = Téléchargement terminé
//Defaultgamesettings = Rétablir les paramètres du jeu par défaut
//Defaultsettings = Rétablir les paramètres par défaut
Defaultgamesettings = Reset Paramètres Jeu
Defaultsettings = Reset Paramètres
Error = Erreur !
hour = Heures
Homemenu = Menu HOME
BOOTERROR = ERREUR DE DÉMARRAGE
ErrorreadingDisc = Erreur à la lecture du disque
ExitUSBISOLoader = Quitter USB Loader GX ?
InitializingNetwork = Initialisation du réseau
InsertDisk = Insérez un disque
InsertaWiiDisc = Insérez un disque Wii !
InsertaSDCardtodownloadimages = Insérez une carte SD pour télécharger les jaquettes.
InsertaSDCardtosave = Insérez une carte SD pour enregistrer.
InsertaSDCardtousethatoption = Insérez une carte SD pour utiliser cette option.
InstallRenameandDeleteareunlocked = Toutes les fonctionnalités sont déverrouillées.
Installerror = Erreur à l'installation !
Installagame = Installer un jeu
Installinggame = Installation du jeu :
Failedtoboot = Échec au démarrage de :
FailedtomountfrontSDcard = Échec à l'initialisation de la SD
FailedtosetUSB = Échec d'initialisation USB :
Failedformating = Échec du formatage
fave = Favoris
Filenotfound = Fichier introuvable.
filesnotfoundontheserver = fichiers introuvables sur le serveur !
filesleft = fichier(s) restant(s)
FlipX = Inversion-X
Force = Forcer
Youneedtoformatapartition = Vous devez formater une partition
Format = Formater
Formattingpleasewait = Formatage en cours, veuillez patienter...
formated = formaté !
free = libre
FreeSpace = Espace restant
FullShutdown = Éteindre
GameID = ID du jeu
Games = Jeux
Gameisalreadyinstalled = Le jeu est déjà installé :
GameRegion = Région
GameSize = Taille du jeu
GoBack = Retour
HowtoShutdown = Arrêt de la Wii ?
keyboard = Clavier
Language = Langue du jeu
Langchange = Changer la langue
Left = Gauche
LikeSysMenu = Menu système
LoadingincIOS = Charger avec cIOS249
ListSort = Tri des Jeux
Loadingstandardlanguage = Chargement de la langue par défaut.
Loadingstandardmusic = Chargement musique standard.
Lock = Verrouiller
LockConsole = Verrouiller la console
MP3Menu = Menu MP3
Missingfiles = Fichier(s) manquant(s)
Networkiniterror = Erreur d'initialisation réseau
Neither = Aucun
Next = Suivant
Nonewupdates = Pas de nouvelle Mise à Jour.
No = Non
Nofilemissing = Aucun fichier manquant !
NoHDDfound = Aucun HDD trouvé !
NoSDcardinserted = Aucune carte SD insérée !
Nopartitionsfound = Aucune partition trouvée
NoUSBDevice = Aucun périphérique USB
NoWBFSpartitionfound = Aucune partition WBFS trouvée
NormalCovers = Normales
Normal = 4:3
NotaWiiDisc = Ce n'est pas un jeu Wii
NoUSBDevicefound = Aucun périphérique USB trouvé.
Notenoughfreespace = Espace libre insuffisant !
Notasupportedformat = Format non supporté !
notset = non défini
of = sur
OFF = Désactivé
OfficialSite = Site Officiel
ok = OK
ON = Activé
OnlyInstall = Jeu installé seulement
Parentalcontrol = Contrôle parental
Partition = Partition
Password = Mot de passe
PasswordChanged = Mot de passe modifié
Passwordhasbeenchanged = Le mot de passe a été modifié
Passwordchange = Modification du mot de passe
Plays = Utilisation
PowerofftheWii = Éteindre la Wii
Prev = Précédent
PromptsButtons = Interface
ReloadSD = Recharger la SD
RenameGameonWBFS = Renommer un jeu
Restart = Redémarrer
Restarting = Redémarrage...
Return = Retour
ReturntoWii = Retourner au menu Wii
Right = Droite
Rumble = Vibrations
QuickBoot = Démarrage rapide
Save = Enregistrer
SaveFailed = Échec de sauvegarde
Specialthanksto = Remerciements à
For = pour
theUSBLoaderandreleasingthesourcecodethe = et pour avoir partagé le code source
secondsleft = secondes restantes
Setasbackgroundmusic = Utiliser comme fond sonore ?
SelectthePartition = Choisissez la partition
youwanttoformat = Vous voulez formater
Standard = Standard
settings = Paramètres
ShutdowntoIdle = Veille
ShutdownSystem = Arrêt
Success = Succès :
Successfullyinstalled = Installé avec succès :
Successfullyupdated = Mise à Jour réussie
Successfullydeleted = Supprimé avec succès :
SuccessfullySaved = Enregistré avec succès
SystemDefault = Système par défaut
ThemePath = Dossier Thème
ThemepathChanged = Dossier du thème modifié
Themepathchange = Dossier du thème
Titlestxtpath = Localisation titles.txt
TitlestxtpathChanged = Localisation de titles.txt modifié
Titlestxtpathchange = Localisation de titles.txt
Try = Essayer
Tooltips = Info-bulles
Timeleft = Temps restant :
updating = Mise à Jour
Unlock = Déverrouiller
Unicodefix = Unicode
Uninstall = Désinstaller
Updatepath= Dossier Mise à Jour
Updatepathchanged = Dossier de Mise à Jour changé.
Updatefailed = Mise à Jour échouée
Updatedol = DOL seul
Updateall = Totale
USBLoaderisprotected = USB Loader GX est verrouillé
USBDevicenotfound = Périphérique USB introuvable
VideoMode = Mode vidéo
VIDTVPatch = Patch VIDTV
Volume = Volume
Waiting = En attente...
WaitingforUSBDevice = Attente d'un périphérique USB
WidescreenFix = 16:9
WiiMenu = Menu Wii
Wiilight = Illumination Wii
WrongPassword = Mot de passe incorrect
Yes = Oui
YoudonthavecIOS = cIOS222 non installé
Japanese = Japonais
German = Allemand
English = Anglais
French = Français
Spanish = Espagnol
Italian = Italien
Dutch = Néerlandais
SChinese = Chinois simplifié
TChinese = Chinois traditionnel
Korean = Coréen

View File

@ -1,178 +0,0 @@
Specialthanksto = Besonderer dank an
t3Covers = 3D Cover
AppLanguage = Sprache
Areyousure = Bist du sicher?
AutoPatch = AutoPatch
Back = Zurück
BacktoHBCorWiiMenu = Zurück zum HBC oder Wii Menü
BacktoLoader = Zurück zum Loader
BacktoWiiMenu = Zurück ins Wii Menü
BootStandard = Boot/Standard
Both = Beides
Cantcreatedirectory = Verzeichnis kann nicht erstellt werden
Cancel = Abbrechen
Cantbeformated = Konnte nicht formatiert werden
Cantdelete = Löschen fehlgeschlagen:
ClicktoDownloadCovers = Klick um Cover runterzuladen
Clock = Uhr
Continueinstallgame = Spiel installieren?
ConsoleDefault = Konsolenstandard
Consoleshouldbeunlockedtomodifyit = Konsole zum ändern bitte entsperren.
ConsoleLocked = Konsole gesperrt
CorrectPassword = Passwort korrekt
Couldnotinitializenetwork = Netzwerk konnte nicht initialisiert werden!
CouldnotopenDisc = Konnte Disc nicht öffnen
CouldnotinitializeDIPmodule = DIP Modul konnte nict initialisiert werden!
CoverDownload = Cover Download
CoverPath = Cover Pfad
CoverpathChanged = Cover Pfad geändert
Coverpathchange = Cover Pfad ändern
Credits = Credits
DiscImages = Disc Images
DiscimagePath = Discimage Pfad
DiscpathChanged = Disc Pfad geändert
Discpathchange = Disc Pfad ändern
DiscDefault = Disc Standard
Display = Anzeige
Doyouwanttoformat = Wollen sie formatieren:
Doyoureallywanttodelete = Wirklich löschen:
Doyouwanttoretryfor30secs = 30 sek lang erneut versuchen?
Downloadingfile = Downloade Datei:
DownloadBoxartimage = Download Boxart Grafik?
Downloadfinished = Download abgeschlossen
Error = Fehler !
BOOTERROR = BOOT FEHLER
ErrorreadingDisc = Disclesefehler
ExitUSBISOLoader = USB Loader GX beenden?
InitializingNetwork = Initialisiere Netzwerk
InsertDisk = Disc einlegen
InsertaWiiDisc = Wii Disc einlegen!
InsertaSDCardtodownloadimages = SD Card für Grafik-Download einlegen.
InsertaSDCardtosave = SD-Card zum speichern einlegen.
InstallRenameandDeleteareunlocked = Alle Funktionen des USB Loader GX freigeschaltet.
Installerror = Installationsfehler!
Installagame = Spiel installieren
Installinggame = Installiere Spiel:
Failedtoboot = Bootfehler:
FailedtomountfrontSDcard = SD-Card Mount-Fehler
FailedtosetUSB = USB-Fehler:
Failedformating = Formatieren fehlgeschlagen
Filenotfound = Datei nicht gefunden.
filesnotfoundontheserver = Datei(en) konnte(n) auf dem Server nicht gefunden werden!
filesleft = Datei(en) verbleiben
FlipX = Flip-X
Force = Erzwinge
Youneedtoformatapartition = Partition muss formatiert werden
Format = Formatieren
Formattingpleasewait = Formatiere, bitte warten...
formated = formatiert!
free = frei
FreeSpace = Freier Speicher
FullShutdown = Ausschalten
GameID = Spiel ID
Games = Spiele
Gameisalreadyinstalled = Spiel bereits vorhanden:
GameRegion = Region
GameSize = Grösse
GoBack = Zurück
//GotoPage = Gehe zu Seite
HowtoShutdown = Wie beenden?
keyboard = Tastatur
Language = Sprache
Langchange = Sprache ändern
Left = Links
LikeSysMenu = Wie SysMenü
LoadingincIOS = Lade in cIOS249
Loadingstandardlanguage = Lade Standardsprache.
Lock = Sperren
LockConsole = Konsole sperren
MP3Menu = MP3 Menü
Missingfiles = Fehlende Datei(en)
Networkiniterror = Netzwerk init Fehler
Neither = Nichts
Next = Nächste
No = Nein
Nofilemissing = Alle Dateien vorhanden!
NoHDDfound = Keine HDD gefunden!
NoSDcardinserted = Keine SD-Card eingelegt!
Nopartitionsfound = Keine Partitionen gefunden
NoUSBDevice = Kein USB Gerät
NoWBFSpartitionfound = Keine WBFS Partition gefunden
NormalCovers = Normale Cover
Normal = Normal
NotaWiiDisc = Keine Wii Disc
NoUSBDevicefound = Kein USB Gerät gefunden.
Notenoughfreespace = Nicht genug freier Speicher!
notset = nicht gesetzt
of = von
OFF = AUS
OfficialSite = Offizielle Seite
ok = OK
ON = AN
Parentalcontrol = Jugenschutz
Partition = Partition
Password = Passwort
PasswordChanged = Passwort geändert
Passwordhasbeenchanged = Passwort geändert
Passwordchange = Passwort ändern
PowerofftheWii = Wii ausschalten
Prev = Vorherige
PromptsButtons = Button Anzeige
ReloadSD = SD aktualisieren
RenameGameonWBFS = Spiel umbenennen
Restart = Neustart
Return = Zurück
ReturntoWii = Zurück ins Wii Menü
Right = Rechts
Rumble = Rumble
QuickBoot = Quick Boot
Save = Speichern
SaveFailed = Speichern fehlgeschlagen
Specialthanksto = Besonderer Dank an
Titlestxtpath = Titles.txt Pfad
TitlestxtpathChanged = Pfad zu titles.txt geändert.
Titlestxtpathchange = Pfad von titles.txt ändern
For = für
theUSBLoaderandreleasingthesourcecodethe = und die veröffentlichung des Quellcodes
secondsleft = sekunden verbleiben
SelectthePartition = Partition auswählen
youwanttoformat = sie wollen formatieren
settings = Einstellungen
ShutdowntoIdle = StandBy
ShutdownSystem = System abschalten
Success = Erfolg:
Successfullyinstalled = Erfolgreich installiert:
Successfullydeleted = Erfolgreich gelöscht:
SuccessfullySaved = Erfolgreich gespeichert
SystemDefault = Systemstandard
ThemePath = Theme Pfad
ThemepathChanged = Theme Pfad geändert
Themepathchange = Theme Pfad ändern
Try = Versuche
Tooltips = ToolTips
Timeleft = Dauer:
Unlock = Entsperren
Unicodefix = Unicode Fix
Uninstall = Deinstallieren
USBLoaderisprotected = USB Loader GX ist geschützt
USBDevicenotfound = USB Gerät nicht gefunden
VideoMode = Video Modus
VIDTVPatch = VIDTV Patch
Volume = Lautstärke
Waiting = Warte...
WaitingforUSBDevice = Warte auf USB Gerät
WidescreenFix = Widescreen Fix
WiiMenu = Wii Menü
WrongPassword = Passwort falsch
Yes = Ja
YoudonthavecIOS = cIOS222 nicht vorhanden
Japanese = Japanisch
German = Deutsch
English = Englisch
French = Französisch
Spanish = Spanisch
Italian = Italienisch
Dutch = Niederländisch
SChinese = Simpl.Chinesisch
TChinese = Trad.Chinesisch
Korean = Koreanisch

View File

@ -1,192 +0,0 @@
Specialthanksto = Un Ringraziamento Speciale a
t3Covers = 3D
AppLanguage = Percorso Lingua
Areyousure = Sei sicuro?
AutoPatch = Automatico
Back = Indietro
BacktoHBCorWiiMenu = Torna a HBC/Menù Wii
BacktoLoader = Torna al Loader
BacktoWiiMenu = Torna al Menù Wii
BootStandard = Riavvio/Standard
Both = Entrambi
Cantcreatedirectory = Non posso creare la cartella
Cancel = Cancella
Cantbeformated = Non può essere Formattato
Cantdelete = Non Posso Eliminare:
ClicktoDownloadCovers = Premi per scaricare le Copertine
Clock = Orologio
Continueinstallgame = Continua ad Installare il gioco?
ConsoleDefault = Predefinito Console
Consoleshouldbeunlockedtomodifyit = Console deve essere Sbloccata per Modificarla.
ConsoleLocked = Console Bloccata
CorrectPassword = Password Corretta
Couldnotinitializenetwork = Non posso Inizializzare la rete!
CouldnotopenDisc = Non posso caricare il Disco!
CouldnotinitializeDIPmodule = Non posso inizializzare il modulo DIP!
CoverDownload = Scaricamento Copertina
CoverPath = Percorso Copertina
CoverpathChanged = Percorso Copertina Modificato
Coverpathchange = Modifico Percorso Copertina
Credits = Credits
DiscImages = Immagine Disco
DiscimagePath = Percorso Imm. Disco
DiscpathChanged = Percorso Immagine Disco Modificato
Discpathchange = Modifica Percorso Immagine Disco
DiscDefault = Predefinito Disco
Display = Display
Doyouwanttoformat = Vuoi Formattare:
Doyoureallywanttodelete = Vuoi realmente Eliminare:
Doyouwanttoretryfor30secs = Vuoi Riprovare per 30 sec?
Downloadingfile = Scaricamento file:
DownloadBoxartimage = Scaricamento Immagine Boxart?
Downloadfinished = Scaricamento Completato
Error = Errore !
BOOTERROR = Errore Avvio
ErrorreadingDisc = Errore Lettura Disco
ExitUSBISOLoader = Esci da USB Loader GX?
InitializingNetwork = Inizializzazione rete
InsertDisk = Inserisci Disco
InsertaWiiDisc = Inserisci un Disco nella Wii!
InsertaSDCardtodownloadimages = Inserisci una scheda SD per scaricare le immagini.
InsertaSDCardtosave = Inserisci una scheda SD per Salvare.
InstallRenameandDeleteareunlocked = Tutte le funzioni di USB Loader GX sono sbloccate.
Installerror = Errore Installazione!
Installagame = Installa un gioco
Installinggame = Sto Installando il gioco:
Failedtoboot = Erroe Avvio:
FailedtomountfrontSDcard = Errore lettura scheda SD
FailedtosetUSB = Errore a Settare porta USB:
Failedformating = Errore Formattazione
Filenotfound = File non trovato.
filesnotfoundontheserver = file non trovato/i sul server!
filesleft = file mancante/i
FlipX = Flip-X
Force = Forza
Youneedtoformatapartition = Devi Formattare una Partizione
Format = Formatta
Formattingpleasewait = Sto Formattando, prego attendere...
formated = formattato!
free = liberi
FreeSpace = Spazio libero
FullShutdown = Completo
GameID = ID Gioco
Games = Giochi
Gameisalreadyinstalled = Gioco già installato:
GameRegion = Regione
GameSize = Dimensione Gioco
GoBack = Indietro
//GotoPage = Vai alla Pagina
HowtoShutdown = Spegnimento Wii?
keyboard = tastiera
Language = Lingua
Langchange = Cambio Lingua
Left = Sinistra
LikeSysMenu = Come SysMenu
LoadingincIOS = Caricamento in cIOS249
Loadingstandardlanguage = Caricamento Lingua Standard.
Lock = Blocco
LockConsole = Blocco Console
MP3Menu = Menù MP3
Missingfiles = File Mancante/i
Networkiniterror = Errore inizializzazione rete
Neither = Nessuno
Next = Avanti
No = No
Nofilemissing = Nessun file mancante!
NoHDDfound = Nessun HDD trovato!
NoSDcardinserted = Nessuna scheda SD inserita!
Nopartitionsfound = Nessuna partizione trovata
NoUSBDevice = Nessun Dispositivo USB
NoWBFSpartitionfound = Nessuna partizione WBFS trovata
NormalCovers = Normali
Normal = Normale
NotaWiiDisc = Non è un Disco Wii
NoUSBDevicefound = Nessun Dispositivo USB trovato.
Notenoughfreespace = Spazio Insufficiente!
notset = non inserita
of = di
OFF = OFF
OfficialSite = Sito Ufficiale
ok = OK
ON = ON
Parentalcontrol = Controllo Genitori
Partition = Partizione
Password = Password
PasswordChanged = Password Modificata
Passwordhasbeenchanged = Password è stata modificata
Passwordchange = Modifica Password
PowerofftheWii = Spegnimento Wii
Prev = Indietro
PromptsButtons = Pulsanti
ReloadSD = Ricarica SD
RenameGameonWBFS = Rinomina Gioco su WBFS
Restart = RiAvvia
Return = Ritorna
ReturntoWii = Ritorna al Menù Wii
Right = Destra
Rumble = Vibrazione
QuickBoot = Avvio Veloce
Save = Salva
SaveFailed = Salvataggio Fallito
Specialthanksto = Ringraziamenti Speciali a
Titlestxtpath = Percorso Titles.txt
TitlestxtpathChanged = Percorso of titles.txt modificato.
Titlestxtpathchange = Modifica percorso titles.txt
For = per
theUSBLoaderandreleasingthesourcecodethe = e rilascio codice sorgente
secondsleft = secondi mancanti
SelectthePartition = Seleziona la Partizione
youwanttoformat = vuoi formattare
settings = Strumenti
ShutdowntoIdle = StandBy
ShutdownSystem = Spegnimento
Success = Successo:
Successfullyinstalled = Installato con successo:
Successfullydeleted = Eliminato con successo:
SuccessfullySaved = Salvato con successo
SystemDefault = Predefinito Sistema
ThemePath = Percorso Tema
ThemepathChanged = Percorso Tema modificato
Themepathchange = Modifica Percorso Tema
Try = Prova
Tooltips = Suggerimenti
Timeleft = Restante:
Unlock = Sblocca
Unicodefix = Caratteri Speciali
Uninstall = Disinstalla
USBLoaderisprotected = USB Loader GX è Protetto
USBDevicenotfound = Dispositivo USB non Trovato
VideoMode = Modalità Video
VIDTVPatch = Forza Video
Volume = Volume
Waiting = Caricamento...
WaitingforUSBDevice = Caricamento Dispositivo USB
WidescreenFix = Widescreen
WiiMenu = Menù Wii
WrongPassword = Password Errata
Yes = Sì
YoudonthavecIOS = Non Possiedi cIOS222
Japanese = Giapponese
German = Tedesco
English = Inglese
French = Francese
Spanish = Spagnolo
Italian = Italiano
Dutch = Olandese
SChinese = Cinese Moderno
TChinese = Cinese Tradizionale
Korean = Coreano
addToFavorite = Favoriti
Backgroundmusic = Musica di Fondo
Backgroundmusicpath = Percorso Musica
hour = ore
Loadingstandardmusic = Caricamento Musica std.
Notasupportedformat = Formato non supportato.
Setasbackgroundmusic = Imposta come Musica fondo
Standard = Standard
Plays = Giocati
all = Alfabetico
count = più giocati
fave = Favoriti
ListSort = Ordine Giochi
InsertaSDCardtousethatoption = Inserire scheda SD per questa opzione

View File

@ -1,193 +0,0 @@
t3Covers = 3D カバー
addToFavorite = お気に入り
all = 全て
AppLanguage = Appの表示言語
Areyousure = 実行しますか?
AutoPatch = 自動パッチ
Back = 戻る
BacktoHBCorWiiMenu = HBC/Wiiメニューへ戻る
Backgroundmusic = サウンド
Backgroundmusicpath = サウンドのPath
BacktoLoader = HBCへ戻る
BacktoWiiMenu = Wiiメニューへ戻る
BootStandard = ブート/標準
BothBoth = 両方
Cantcreatedirectory = ディレクトリ作成に失敗しました。
Cancel = キャンセル
Cantbeformated = フォーマットに失敗しました。
Cantdelete = 削除に失敗しました:
ClicktoDownloadCovers = カバーをダウンロードするのにクリックして下さい。
Clock = Clock
Close = 閉じる
Continueinstallgame = ゲームのインストールを続けますか?
ConsoleDefault = デフォルトコンソール
Consoleshouldbeunlockedtomodifyit = 変更にはコンソールのロック解除が必要です。
ConsoleLocked = コンソールがロックされています。
CorrectPassword = 正しいパスワード
Couldnotinitializenetwork = ネットワークの初期化ができません!
CouldnotopenDisc = ディスクオープンに失敗しました。
CouldnotinitializeDIPmodule = DIPモジュールの初期化ができません!
CoverDownload = カバー ダウンロード
CoverPath = カバーパス
CoverpathChanged = カバーパスを変更しました。
Coverpathchange = カバーパスの変更
count = プレイ時間
Credits = 協力者
DiscImages = ディスクイメージ
DiscimagePath = ディスクイメージパス
DiscpathChanged = ディスクパスを変更しました。
Discpathchange = ディスクパスの変更
DiscDefault = デフォルトディスク
Display = ディスプレイ
Doyouwanttoformat = フォーマットしますか:
Doyoureallywanttodelete = 削除しますか:
Doyouwanttoretryfor30secs = 再実行しますか?(30秒)
Downloadingfile = ファイルのダウンロード中:
DownloadBoxartimage = Boxart imageをダウンロードしますか?
Downloadfinished = ダウンロードを終了しました。
Error = Error !
BOOTERROR = BOOT ERROR
ErrorreadingDisc = ディスク読込み失敗(Error reading Disc)
ExitUSBISOLoader = USB Loader GXを終了しますか?
Homemenu = ホームメニュー
InitializingNetwork = ネットワークの初期化中...
InsertDisk = ディスク挿入
InsertaWiiDisc = Wiiディスクを挿入して下さい
InsertaSDCardtodownloadimages = イメージをダウンロードするSDカードを挿入して下さい。
InsertaSDCardtosave = 保存するSDカードを挿入して下さい。
InsertaSDCardtousethatoption = このオプションを使用するのにSDカードを挿入して下さい。
InstallRenameandDeleteareunlocked = 全ての機能がアンロックされてました。
Installerror = Install Error!
Installagame = ゲームインストール
Installinggame = ゲームをインストール中:
Failedtoboot = 起動に失敗:
FailedtomountfrontSDCard = SDカードの認識に失敗しました。
FailedtosetUSB = USB接続に失敗:
Failedformating = フォーマットに失敗しました。
fave = お気に入り
Filenotfound = ファイルを検出できませんでした。
filesnotfoundontheserver = サーバーにファイルがありません!
filesleft = file(s) left(残りのファイル数)
FlipX = Flip-X
Force = Force
Youneedtoformatapartition = パーティションをフォーマットして下さい。
Format = フォーマット
Formattingpleasewait = フォーマット中です、暫くお待ち下さい...
formated = フォーマット完了!
free = 空き
FreeSpace = 空容量
FullShutdown = 完全シャットダウン
GameID = ゲームID
Games = ゲーム
Gameisalreadyinstalled = ゲームは既にインストール済みです:
GameRegion = ゲームの地域情報
GameSize = ゲームサイズ
GoBack = 戻る
//GotoPage = Go to Page
HowtoShutdown = シャットダウンの方法は?
hour = 時間
keyboard = キーボード
Language = 言語
Langchange = 言語の変更
Left = 左
LikeSysMenu = Like SysMenu
LoadingincIOS = cIOS249でロード中...
Loadingstandardlanguage = 標準の言語をロード中...
LikeSysMenu = Like SysMenu Loading
IOS = cIOS249ロード
Lock = ロック
LockConsole = コンソールをロックする
MP3Menu = MP3メニュー
Missingfiles = 検出できなかったファイル
Networkiniterror = Network initialization error
Neither = どちらでもない
Next = 次へ
No = いいえ
Nofilemissing = ファイルを検出できませんでした!
NoHDDfound = HDDを検出できませんでした!
NoSDCardinserted = SDカードを検出できませんでした!
Nopartitionsfound = パーティションを検出できませんでした。
NoUSBDevice = USBデバイスを検出できませんでした。
NoWBFSpartitionfound = WBFSパーティションを検出できませんでした。
NormalCovers = ノ-マルカバー
Normal = Normal(4:3)
NotaWiiDisc = Wiiディスクではありません。
NoUSBDevicefound = USBデバイズが検出されていません。
Notenoughfreespace = 空容量が不足しています!
Notasupportedformat = ディスク形式はサポートされていません。
notset = セットされませんでした。
of = of
OFF = オフ
OfficialSite = オフィシャルサイト
ok =
ON = オン
Parentalcontrol = 保護者による制限
Partition = パーティション
Password = パスワード
PasswordChanged = パスワード変更
Passwordhasbeenchanged = パスワードを変更しました
Passwordchange = パスワード変更
PowerofftheWii = Wiiを電源OFFする
Plays = プレイ時間
Prev = 前へ
PromptsButtons = ボタンを押して~
ReloadSDカード = SDカードのリロード
RenameGameonWBFS = WBFS上のゲーム名変更
Restart = リスタート
Return = 戻る
ReturntoWii = Wiiメニューへ戻る
Right = 右
Rumble = 振動
QuickBoot = クイック起動
Save = セーブ
SaveFailed = セーブに失敗しました。
Specialthanksto = この場を借りて感謝です☆
For = for
theUSBLoaderandreleasingthesourcecodethe = 及びリリースされているソースコード
secondsleft = 完了までの秒数
SelectthePartition = パーティション選択
youwanttoformat = フォーマットを実行する。
settings = 設定
Setasbackgroundmusic = サウンドとして設定する
Standard = 標準
ShutdowntoIdle = システムをアイドル状態にする
ShutdownSystem = システムを終了する
Success = 成功:
Successfullyinstalled = インストールに成功:
Successfullydeleted = 削除に成功:
SuccessfullySaved = セーブに成功:
SystemDefault = デフォルトシステム
ThemePath = テーマパス
ThemepathChanged = テーマパスを変更しました。
Themepathchange = テーマパスの変更
Titlestxtpath = Titles.txt Path
TitlestxtpathChanged = titles.txtのPathを変更しました。
Titlestxtpathchange = titles.txtのPathを変更
Try = 試みる
Tooltips = ツールヒント
Timeleft = 残り時間:
Unlock = アンロック
Unicodefix = Unicode Fix
Uninstall = アンインストール
USBLoaderisprotected = USB Loaderは保護されています。
USBDevicenotfound = USBデバイスを検出できませんでした。
VideoMode = ビデオモード
VIDTVPatch = VIDTVパッチ
Volume = ボリューム
Waiting = 暫くお待ちください...
WaitingforUSBDevice = USBデバイスの応答待ち。
WidescreenFix = Widescreen(16:9)
WiiMenu = Wiiメニュー
WrongPassword = パスワードが違います。
Yes = はい
YoudonthavecIOS = cIOS222が検出できませんでした。
Japanese = 日本語
German = ドイツ語
English = 英語
French = フランス語
Spanish = スペイン語
Italian = イタリア語
Dutch = オランダ語
SChinese = 中国語(簡体字)
TChinese = 中国語(繁体字)
Korean = 韓国語

View File

@ -1,171 +0,0 @@
Specialthanksto = Special thanks to
t3Covers = 3D 표지
AppLanguage = USB 로더 언어
Areyousure = 확실합니까?
AutoPatch = 자동 패치
Back = 뒤로
BacktoHBCorWiiMenu = 홈브류 메뉴 또는 Wii 메뉴로
BacktoLoader = 로더로 돌아감
BacktoWiiMenu = Wii 메뉴로 놀아가기
BootStandard = 기본 부팅설정
BothBoth = 전부 표시
Cantcreatedirectory = 디렉토리를 만들 수 없습니다
Cancel = 취소
Cantbeformated = 포맷할 수 없습니다.
Cantdelete = 삭제할 수 없습니다:
ClicktoDownloadCovers = 표지를 다운하려면 클릭하세요
Clock = 시계
Continueinstallgame = 계속 설치하겠습니까?
ConsoleDefault = 콘솔 기본값
Consoleshouldbeunlockedtomodifyit = 변경하려면 콘솔 잠김을 해제하세요.
ConsoleLocked = 콘솔 잠김
CorrectPassword = 올바른 비밀번호
Couldnotinitializenetwork = 네트워크 초기화 실패!
CouldnotopenDisc = 디스크를 열 수 없습니다.
CouldnotinitializeDIPmodule = DIP 모듈 초기화 실패!
CoverDownload = 표지 다운로드
CoverPath = 표지 경로
CoverpathChanged = 표지 경로 변경됨
Coverpathchange = 표지 경로 변경
Credits = Credits
DiscImages = 디스크 이미지
DiscimagePath = 디스크 이미지 경로
DiscpathChanged = 디스크 경로 변경됨
Discpathchange = 디스크 경로 변경
DiscDefault = 디스크 기본값
Display = 화면 표시
Doyouwanttoformat = 포맷하겠습니까:
Doyoureallywanttodelete = 정말로 삭제하겠습니까:
Doyouwanttoretryfor30secs = 30초간 재시도 할까요?
Downloadingfile = 파일 다운로드 중:
DownloadBoxartimage = 박스 이미지를 다운로드 할까요?
Downloadfinished = 다운로드 완료
Error = 에러 !
BOOTERROR = 부팅 에러
ErrorreadingDisc = 디스크 읽기 오류
ExitUSBISOLoader = USB로더 GX를 종료할까요?
InitializingNetwork = 네트워크 초기화
InsertDisk = 디스크를 넣어주세요
InsertaWiiDisc = Wii 디스크를 넣으세요!
InsertaSDCardtodownloadimages = 다운받은 이미지를 저장할 SD카드를 넣으세요.
InsertaSDCardtosave = 저장할 SD카드를 넣으세요.
InstallRenameandDeleteareunlocked = USB로더 GX 기능 잠금 해제.
Installerror = 설치 에러!
Installagame = 게임을 설치할까요
Installinggame = 게임 설치 중:
Failedtoboot = 부팅 실패:
FailedtomountfrontSDcard = SD카드 인식 실패
FailedtosetUSB = USB 세팅 실패:
Failedformating = 포맷 실패
filesnotfoundontheserver = 파일이 서버에 없습니다!
filesleft = 파일 남음
FlipX = 좌/우 설정
Force = 강제
Youneedtoformatapartition = 파티션을 포맷해야 합니다
Format = 포맷
Formattingpleasewait = 포맷 중. 기다려 주세요...
formated = 포맷 완료!
free = 남음
FreeSpace = 여유 공간
FullShutdown = 완전히 끄기
GameID = 게임 ID
Games = 게임
Gameisalreadyinstalled = 게임이 이미 설치되어 있습니다.
GameRegion = 지역
GameSize = 게임 용량
GoBack = 뒤로 가기
//GotoPage = 페이지
HowtoShutdown = 어떻게 종료할까요?
Language = 언어
Langchange = 언어 변경
Left = 왼쪽
LikeSysMenu = 시스템 메뉴처럼
LoadingincIOS = cIOS249로 로딩
Lock = 잠금
LockConsole = 콘솔 잠금
MP3Menu = MP3 메뉴
Missingfiles = 파일 누락
Networkiniterror = 네트워크 초기화 에러
Neither = 표시 없음
Next = 다음
No = 아니오
Nofilemissing = 누락 파일 없음!
NoHDDfound = 하드 디스크가 없습니다!
NoSDcardinserted = SD카드가 없습니다!
Nopartitionsfound = 파티션이 없습니다.
NoUSBDevice = USB 장치가 없습니다.
NoWBFSpartitionfound = WBFS 파티션이 없습니다.
NormalCovers = 일반 표지
Normal = 일반
NotaWiiDisc = Wii 디스크가 아닙니다
NoUSBDevicefound = USB 장치가 없습니다.
Notenoughfreespace = 여유 공간이 부족합니다!
notset = 설정되지 않음
of = 중
OFF = 꺼짐
OfficialSite = 공식 사이트
ok = 확인
ON = 켜짐
Parentalcontrol = 자녀보호기능
Partition = 파티션
Password = 비밀번호
PasswordChanged = 비밀번호 변경됨
Passwordhasbeenchanged = 비밀번호가 변경되었습니다
Passwordchange = 비밀번호 변경
PowerofftheWii = Wii 전원 끄기
Prev = 이전
PromptsButtons = 프롬프트/버튼
ReloadSD = SD카드 읽기
RenameGameonWBFS = WBFS에서 게임 이름 변경
Restart = 다시 시작
Return = 돌아가기
ReturntoWii = Wii로 돌아가기
Right = 오른쪽
Rumble = 진동
QuickBoot = 게임 바로실행
Save = 저장
SaveFailed = 저장 실패
Specialthanksto = Special thanks to
For = for
theUSBLoaderandreleasingthesourcecodethe = and releasing the source code
secondsleft = 초 남았습니다
SelectthePartition = 포맷하려는
youwanttoformat = 파티션을 선택하세요
settings = 설정
ShutdowntoIdle = 대기 상태로
ShutdownSystem = 시스템 종료
Success = 성공:
Successfullyinstalled = 설치 성공:
Successfullydeleted = 삭제 성공:
SuccessfullySaved = 저장 성공
SystemDefault = 시스템 기본값
ThemePath = 테마 경로
ThemepathChanged = 테마 경로 변경됨
Themepathchange = 테마 경로 변경
Try = 시도
Tooltips = Tooltips
Timeleft = 남은 시간:
Unlock = 잠금해제
Uninstall = 제거
USBLoaderisprotected = USB 로더 GX 잠김 상태
USBDevicenotfound = USB 장치가 없습니다.
VideoMode = 비디오 모드
VIDTVPatch = VIDTV 패치
Volume = 음량
Waiting = 기다리는 중...
WaitingforUSBDevice = USB 장치를 기다리는 중
WidescreenFix = 와이드 스크린에 맞춤
WiiMenu = Wii 메뉴로
WrongPassword = 잘못된 비밀번호
Yes = 예
YoudonthavecIOS = cIOS222가 없습니다.
Japanese = 일본어
German = 독일어
English = 영어
French = 불어
Spanish = 스페인어
Italian = 이태리어
Dutch = 네덜란드어
SChinese = 중국어(간체)
TChinese = 중국어(번체)
Korean = 한국어

View File

@ -1,192 +0,0 @@
//r380, Norwegian v2, 21.05.2009
ok = OK
addToFavorite = Favoritt
all = Alfabetisk
AppLanguage = Program språk
t3Covers = 3D cover
Areyousure = Er du sikker?
AutoPatch = AutoPatch
Back = Tilbake
Backgroundmusic = Bakgrunnsmusikk
Backgroundmusicpath = Bakgrunnsmusikk sti endret
BacktoHBCorWiiMenu = Tilbake til HBC eller Wii meny
BacktoLoader = HBC/Loader
BacktoWiiMenu = Wii meny
BootStandard = Boot/Standard
Both = Begge
Cantcreatedirectory = Kan ikke opprette mappestruktur
Cancel = Avbryt
Cantbeformated = Kan ikke formateres
Cantdelete = Kan ikke slette:
ClicktoDownloadCovers = Klikk for å laste ned cover
Clock = Klokke
Close = Lukk
Continueinstallgame = Fortsett å installere spill?
ConsoleDefault = Konsoll Standard
Consoleshouldbeunlockedtomodifyit = Konsoll må være opplåst for å modifisere.
ConsoleLocked = Konsoll låst
CorrectPassword = Riktig passord
Couldnotinitializenetwork = Kan ikke initialisere nettverk!
CouldnotopenDisc = Kan ikke åpne plate
CouldnotinitializeDIPmodule = Kan ikke initialisere DIP modul!
CoverDownload = Cover nedlasting
CoverPath = Cover sti
CoverpathChanged = Cover sti endret
Coverpathchange = Endre cover sti
count = Ganger spilt
Credits = Medvirkende
DiscImages = Plate bilder
DiscimagePath = Plate sti
DiscpathChanged = Plate sti endret
Discpathchange = Endre plate sti
DiscDefault = Plate Standard
Display = Vis
Doyouwanttoformat = Vil du formatere:
Doyoureallywanttodelete = Er du sikker på at du vil slette:
Doyouwanttoretryfor30secs = Vil du fortsette å prøve i 30 sekunder?
Downloadingfile = Laster ned fil:
DownloadBoxartimage = Last ned cover bilde?
Downloadfinished = Nedlasting ferdig
Error = Feil !
hour = Timer
Homemenu = HOME Meny
BOOTERROR = BOOT FEIL
ErrorreadingDisc = Feil ved lesing av plate
ExitUSBISOLoader = Avslutt USB Loader GX?
InitializingNetwork = Initialiserer nettverk
InsertDisk = Sett inn plate
InsertaWiiDisc = Sett inn en Wii plate!
InsertaSDCardtodownloadimages = Sett inn et SD-kort for å laste ned bilder.
InsertaSDCardtosave = Sett inn et SD-kort for å lagre.
InsertaSDCardtousethatoption = Sett inn et SD-kort for å bruke innstillingen.
InstallRenameandDeleteareunlocked = Alle funksjonene til USB Loader GX er opplåst.
Installerror = Installasjonsfeil!
Installagame = Installer et spill
Installinggame = Installerer spill:
Failedtoboot = Feil ved start:
FailedtomountfrontSDcard = Feil ved montering av SD-kort i front
FailedtosetUSB = Feil ved valgt USB:
Failedformating = Feil ved formatering
fave = Favoritter
filesnotfoundontheserver = filer ikke funnet på serveren!
Filenotfound = Fil ikke funnet.
filesleft = fil(er) gjenstår
FlipX = Flip-X
Force = Tving
Youneedtoformatapartition = Du må formatere en partisjon
Format = Formater
keyboard = Tastatur
Formattingpleasewait = Formaterer, vennligst vent...
formated = formatert!
free = ledig
FreeSpace = Ledig plass
FullShutdown = Skru helt av
GameID = Spill ID
Games = Spill
Gameisalreadyinstalled = Spillet er allerede installert:
GameRegion = Region
GameSize = Spill størrelse
GoBack = Gå tilbake
HowtoShutdown = Hvordan skru av?
Language = Språk
Left = Venstre
LikeSysMenu = Lik Systemmeny
LoadingincIOS = Laster i cIOS249
ListSort = Sorter spill liste
Loadingstandardlanguage = Laster standard språk.
Loadingstandardmusic = Laster standard musikk.
Lock = Lås
LockConsole = Lås konsoll
MP3Menu = MP3 meny
Missingfiles = Manglende filer
Networkiniterror = Nettverk init feil
Neither = Ingen
Next = Neste
No = Nei
Nofilemissing = Ingen filer mangler!
NoHDDfound = Ingen HDD funnet!
NoSDcardinserted = Intet SD-kort satt i!
Nopartitionsfound = Ingen partisjoner funnet
NoUSBDevice = Ingen USB enhet
NoWBFSpartitionfound = Ingen WBFS partisjon funnet
NormalCovers = Normale cover
Normal = Normal
NotaWiiDisc = Ikke en Wii plate
NoUSBDevicefound = Ingen USB enhet funnet.
Notenoughfreespace = Ikke nok ledig plass!
Notasupportedformat = Ikke et støttet format!
notset = ikke satt
of = av
OFF = AV
OfficialSite = Offisiell nettside
ON = PÅ
Parentalcontrol = Foreldre kontroll
Partition = Partisjon
Password = Passord
PasswordChanged = Passord endret
Passwordhasbeenchanged = Passord har blitt endret
Passwordchange = Endre passord
Plays = Ganger spilt
PowerofftheWii = Skru av Wii
Prev = Forrige
PromptsButtons = Dialog knapper
ReloadSD = Les SD på nytt
RenameGameonWBFS = Gi nytt navn til spill på WBFS
Restart = Start på nytt
Return = Gå tilbake
ReturntoWii = Tilbake til Wii meny
Right = Høyre
Rumble = Vibrasjon
QuickBoot = Hurtig start
Save = Lagre
SaveFailed = Lagre feilet
Specialthanksto = Spesiell takk til
For = for
theUSBLoaderandreleasingthesourcecodethe = og utgivelse av kildekoden
secondsleft = sekunder gjenstår
Setasbackgroundmusic = Bruk som bakgrunnsmusikk?
SelectthePartition = Velg partisjonen
youwanttoformat = du vil formatere
Standard = Standard
settings = Innstillinger
ShutdowntoIdle = Skru av
ShutdownSystem = Skru helt av
Success = Suksess:
Successfullyinstalled = Vellykket installering:
Successfullydeleted = Vellykket sletting:
SuccessfullySaved = Vellykket lagring
SystemDefault = System Standard
ThemePath = Tema sti
ThemepathChanged = Tema sti endret
Themepathchange = Endre tema sti
Titlestxtpath = Titles.txt sti
TitlestxtpathChanged = Titles.txt sti endret.
Titlestxtpathchange = Endre titles.txt sti
Try = Prøv
Tooltips = Verktøystips
Timeleft = Tid igjen:
Unlock = Lås opp
Unicodefix = Unicode fiks
Uninstall = Avinstaller
USBLoaderisprotected = USB Loader GX er beskyttet
USBDevicenotfound = USB enhet ikke funnet
VideoMode = Video modus
VIDTVPatch = VIDTV Patch
Volume = Volum
Waiting = Venter...
WaitingforUSBDevice = Venter på USB enhet
WidescreenFix = Fiks for 16/9
WiiMenu = Wii meny
WrongPassword = Feil passord
Yes = Ja
YoudonthavecIOS = Du har ikke cIOS222
Japanese = Japansk
German = Tysk
English = Engelsk
French = Fransk
Spanish = Spansk
Italian = Italiensk
Dutch = Nederlandsk
SChinese = S.Kinesisk
TChinese = T.Kinesisk
Korean = Koreansk

View File

@ -1,194 +0,0 @@
t3Covers = Capas 3D
addToFavorite = Adicionar aos favoritos
all = Alfabética
AppLanguage = Idioma
Areyousure = Tem a certeza?
AutoPatch = Patch automático
Back = Voltar
Backgroundmusic = Música de fundo
Backgroundmusicpath = Pasta Música Fundo
BacktoHBCorWiiMenu = Voltar ao Loader/Menu da Wii
BacktoLoader = Loader
BacktoWiiMenu = Menu da Wii
BootStandard = Arranque/Standard
Both = Ambos
Cantcreatedirectory = Não foi possível criar a pasta
Cancel = Cancelar
Cantbeformated = Não pode pode ser formatado
Cantdelete = Não foi possível apagar:
ClicktoDownloadCovers = Carregue para descarregar capas
Clock = Relógio
Close = Fechar
Continueinstallgame = Continuar instalação do jogo?
ConsoleDefault = Predefinição Consola
Consoleshouldbeunlockedtomodifyit = É necessário desbloquear a configuração para poder modificar o parâmetro.
ConsoleLocked = Configuração Bloqueada
CorrectPassword = Password Correcta
Couldnotinitializenetwork = Não foi possível incializar a Ligação de Rede!
CouldnotopenDisc = Não foi possível abrir o Disco
CouldnotinitializeDIPmodule = Não foi possível inicializar o módulo DIP!
CoverDownload = Download de Capas
CoverPath = Pasta Capas
CoverpathChanged = Pasta das Capas alterado
Coverpathchange = Alterar Pasta das Capas
count = Vezes jogadas
Credits = Créditos
DiscImages = Imagens de Disco
DiscimagePath = Pasta Imagens Disco
DiscpathChanged = Pasta das Imagens Disco alterada
Discpathchange = Alterar da Pasta das Imagens de Disco
DiscDefault = Predefinição Disco
Display = Mostrar
Doyouwanttoformat = Deseja FORMATAR:
Doyoureallywanttodelete = Quer mesmo REMOVER o jogo:
Doyouwanttoretryfor30secs = Deseja tentar novamente dentro de 30 segs?
Downloadingfile = Descarregando ficheiro:
DownloadBoxartimage = Descarregar imagem da Caixa?
Downloadfinished = Download Terminado
Error = Erro !
hour = Horas
BOOTERROR = ERRO DE ARRANQUE
ErrorreadingDisc = Erro ao ler o Disco
ExitUSBISOLoader = Pretende sair do USB Loader GX?
InitializingNetwork = Inicializando Ligação de Rede
InsertDisk = Insira o Disco
InsertaWiiDisc = Insira um Disco da Wii!
InsertaSDCardtodownloadimages = Insira um cartão SD para descarregar as imagens.
InsertaSDCardtosave = Insira um cartão SD para guardar.
InsertaSDCardtousethatoption = Insira um cartão SD para usar esta funcionalidade.
InstallRenameandDeleteareunlocked = As configurações estão desbloqueadas.
Installerror = Erro de Instalação!
Installagame = Instalar um jogo
Installinggame = Instalando jogo:
Failedtoboot = Falha ao arrancar:
FailedtomountfrontSDcard = Falha ao montar cartão SD
FailedtosetUSB = Falha ao iniciar USB:
Failedformating = Falha ao formatar
fave = Favoritos
Filenotfound = Ficheiro não encontrado.
filesnotfoundontheserver = ficheiros não encontrados no servidor!
filesleft = ficheiros(s) restante(s)
FlipX = Paginação Horizontal
Force = Forçar
Youneedtoformatapartition = É necessário FORMATAR a partição
Format = Formatar
Formattingpleasewait = Formatando, por favor aguarde...
formated = formatado!
free = livres
FreeSpace = Espaço Livre
FullShutdown = Desligar
GameID = ID do Jogo
Games = Jogos
Gameisalreadyinstalled = Este jogo já está instalado:
GameRegion = Região
GameSize = Tamanho do Jogo
GoBack = Voltar
//GotoPage = Ir para a Página
HowtoShutdown = Como desligar a consola?
Homemenu = Menú Inicial
Keyboard = Teclado
Language = Idioma
Langchange = Alterar Idioma
Left = Esquerda
LikeSysMenu = Igual ao Menu da Wii
ListSort = Ordenação Jogos
LoadingincIOS = Carregando com o cIOS249
Loadingstandardlanguage = Carregado idioma padrão.
Loadingstandardmusic = Carregando música padrão.
Lock = Bloquear
LockConsole = Bloquear Configurações
MP3Menu = Menu MP3
Missingfiles = Ficheiros em falta
Networkiniterror = Erro ao inicializar ligação de rede
Neither = Nenhum
Next = Próximo
No = Não
Nofilemissing = Não há ficheiros em falta!
NoHDDfound = Não foi encontrado nenhum Disco Rígido!
NoSDcardinserted = Cartão SD não inserido!
Nopartitionsfound = Não foram encontradas partições
NoUSBDevice = Nenhum dispositivo USB encontrado
NoWBFSpartitionfound = Não foi encontrada nenhuma partição WBFS
NormalCovers = Capas Normais
Normal = Normal
NotaWiiDisc = Não é um Disco da Wii
NoUSBDevicefound = Nenhum dispositivo USB encontrado.
Notenoughfreespace = Não há espaço livre suficiente!
notset = não definido
of = de
OFF = Desligado
OfficialSite = Site Oficial
ok = OK
ON = Ligado
Parentalcontrol = Controlo Parental
Partition = Partição
Password = Password
PasswordChanged = Password Alterada
Passwordhasbeenchanged = A Password foi alterada
Passwordchange = Alterar Password
Plays = Vezes jogadas
PowerofftheWii = Desligar a Wii
Prev = Anterior
PromptsButtons = Mensagens/Botões
ReloadSD = Actualizar do cartão SD
RenameGameonWBFS = Alterar nome do jogo na partição WBFS
Restart = Reiniciar
Return = Voltar
ReturntoWii = Menu da Wii
Right = Direita
Rumble = Vibração
QuickBoot = Arranque Rápido
Save = Gravar
SaveFailed = Falha ao Gravar
Specialthanksto = Agradecimentos
Titlestxtpath = Pasta Titles.txt
TitlestxtpathChanged = Pasta do ficheiro titles.txt alterada.
Titlestxtpathchange = Alterar pasta do titles.txt
For = pelo
theUSBLoaderandreleasingthesourcecodethe = e ter disponibilizado o código fonte
secondsleft = segundos restantes
SelectthePartition = Seleccione a Partição
youwanttoformat = Deseja formatar?
Standard = Standard
settings = Configurações
ShutdowntoIdle = Standby
ShutdownSystem = Desligar
Success = Sucesso:
Successfullyinstalled = Instalado com Sucesso:
Successfullydeleted = Removido com Sucesso:
SuccessfullySaved = Gravado com Sucesso
SystemDefault = Predefinição Sistema
ThemePath = Pasta Temas
ThemepathChanged = Pasta dos Temas alterada
Themepathchange = Alterar pasta dos Temas
Try = Tentar
Tooltips = Dicas
Timeleft = Tempo restante:
Unlock = Desbloquear
Unicodefix = Corrigir Unicode
Uninstall = Remover
USBLoaderisprotected = O USB Loader GX está bloqueado
USBDevicenotfound = Dispositivo USB não encontrado
VideoMode = Modo de Vídeo
VIDTVPatch = Patch VIDTV
Volume = Volume
Waiting = Aguardando...
WaitingforUSBDevice = Aguardando pelo Dispositivo USB
WidescreenFix = Correcção Widescreen
WiiMenu = Menu da Wii
WrongPassword = Password Incorrecta
Yes = Sim
YoudonthavecIOS = cIOS222 não instalado
Japanese = Japonês
German = Alemão
English = Inglês
French = Francês
Spanish = Espanhol
Italian = Italiano
Dutch = Holandês
SChinese = Chinês Simplificado
TChinese = Chinês Tradicional
Korean = Coreano
// Portuguese(pt-pt) Language File rev4.4 (22-05-2009 9:54) for GUI USB Loader GX 1
// Tested with Loader rev385
// Translated by Sky8000

View File

@ -1,186 +0,0 @@
Specialthanksto = Отдельное спасибо :
addToFavorite = Добавить в избранное
t3Covers = 3D Обложки
AppLanguage = Язык приложения
Areyousure = Вы уверены ?
AutoPatch = Авто Патч
Back = Назад
Backgroundmusic = Фоновая музыка
Backgroundmusicpath = Путь к фоновой музыке
BacktoHBCorWiiMenu = Вернуться в HBC или меню Wii
BacktoLoader = Вернуться в загрузчик
BacktoWiiMenu = Вернуться в меню Wii
BootStandard = Загрузка/Стандарт
Both = Оба
Cantcreatedirectory = Не могу создать папку
Cancel = Отмена
Cantbeformated = Невозможно отформатировать
Cantdelete = Невозможно удалить:
ClicktoDownloadCovers = Нажми, чтобы скачать обложки
Clock = Часы
Close = Закрыть
Continueinstallgame = Продолжить установку игры ?
ConsoleDefault = По умолчанию (консоль)
Consoleshouldbeunlockedtomodifyit = Для изменения консоль должна быть разблокирована.
ConsoleLocked = Консоль заблокирована
CorrectPassword = Правильный пароль
Couldnotinitializenetwork = Не могу инициализировать сеть!
CouldnotopenDisc = Не могу прочесть диск
CouldnotinitializeDIPmodule = Не могу запустить модуль DIP!
CoverDownload = Скачать обложку
CoverPath = Путь к обложкам
CoverpathChanged = Путь к обложкам был изменен.
Coverpathchange = Сменить путь к обложкам
Credits = Об авторах
DiscImages = Изображения дисков
DiscimagePath = путь к изображениям дисков
DiscpathChanged = путь к изображениям дисков изменен
Discpathchange = изменить путь к изображениям дисков
DiscDefault = По умолчанию (диск)
Display = Отображать
Doyouwanttoformat = Вы хотите отформатировать:
Doyoureallywanttodelete = Вы хотите удалить:
Doyouwanttoretryfor30secs = Хотите попробовать еще раз на 30 секунд?
Downloadingfile = Скачиваю файл:
DownloadBoxartimage = Скачать обложку диска?
Downloadfinished =Скачивание завершено
Error = Ошибка !
BOOTERROR = ОШИБКА ЗАГРУЗКИ
ErrorreadingDisc = Ошибка чтения диска
ExitUSBISOLoader = Выйти из USB Loader GX?
InitializingNetwork = Инициализирую сеть
InsertDisk = Вставьте диск
InsertaWiiDisc = Вставьте диск от Wii!
InsertaSDCardtodownloadimages = Для скачивания изображений вставьте SD карту.
InsertaSDCardtosave = Для сохранения вставьте SD карту.
InsertaSDCardtousethatoption = Для использования этой функции нужна SD карта
InstallRenameandDeleteareunlocked = Все функции USB Loader GX разблокированы.
Installerror = Ошибка установки!
Installagame = Установить игру
Installinggame = Устанавливаю игру:
Failedtoboot = Ошибка загрузки:
FailedtomountfrontSDcard = Ошибка при монтировании SD карты
FailedtosetUSB = Ошибка инициализации USB:
Failedformating = Форматирование не удалось
Filenotfound = Файл не найден
filesnotfoundontheserver = файлы не найдены на сервере!
filesleft = осталось файлов:
FlipX = Flip-X
Force = Принудительно
Youneedtoformatapartition = Требуется форматирование раздела
Format = Форматировать
Formattingpleasewait = Форматирую, пожалуйста подождите...
formated = форматирование завершено!
free = свободно
FreeSpace = Свободное пространство
FullShutdown = Полное отключение
GameID = ID игры
Games = Игры
Gameisalreadyinstalled = Игра уже установлена:
GameRegion = Регион
GameSize = Размер игры
GoBack = Назад
GotoPage = На страницу
HowtoShutdown = Способ отключения?
Homemenu = Домашнее Меню
Language = Язык
Langchange = Сменить язык
Left = Налево
LikeSysMenu = как SysMenu
LoadingincIOS = загружаю с cIOS249
Lock = Заблокировать
LockConsole = Заблокировать консоль
MP3Menu = Меню MP3
Missingfiles = Отсутствующие файлы
Networkiniterror = Ошибка инициализации сети
Neither = Ни то, ни другое
Next = Следующий
No = Нет
Nofilemissing = Файл не найден!
NoHDDfound = HDD не найден!
NoSDcardinserted = SD карта не вставлена!
Nopartitionsfound = Разделы не найдены
NoUSBDevice = Нет USB устройств
NoWBFSpartitionfound = Не найден раздел WBFS
NormalCovers = Обычные обложки
Normal = Обычный
NotaWiiDisc = Это не диск Wii
NoUSBDevicefound =USB устройств не обнаружено
Notenoughfreespace = Не хватает свободного места!
Notasupportedformat = Формат не поддерживается
notset = не установлено
of = из
OFF = ВЫКЛ
OfficialSite = Официальный сайт
ok = OK
ON = ВКЛ
Parentalcontrol = Родительский контроль
Partition = Раздел
Password = Пароль
PasswordChanged = Пароль изменен
Passwordhasbeenchanged = Пароль был изменен
Passwordchange = Сменить пароль
PowerofftheWii = Выключить Wii
Plays = Воспроизводится
Prev = Предыдущий
PromptsButtons = Кнопки приглашения
ReloadSD = Перечитать SD карту
RenameGameonWBFS = Переименовать игры в WBFS
Restart = Перезапустить
Return = Вернуться
ReturntoWii = Вернуться в меню Wii
Right = Направо
Rumble = Вибрация
QuickBoot = Быстрая загрузка
Save = Сохранить
SaveFailed = Сохранение не удалось
Specialthanksto = Отдельные благодарности
For = за
theUSBLoaderandreleasingthesourcecodethe = и публикацию исходного кода
secondsleft = секунд осталось
SelectthePartition = Выберите раздел,
youwanttoformat = который вы хотите отформатировать
settings = Установки
Standard = Стандартный
ShutdowntoIdle = Перевести в режим сна
ShutdownSystem = Выключить систему
Success = Успех:
Successfullyinstalled = Успешно установлено:
Successfullydeleted = Успешно удалено:
SuccessfullySaved = Успешно сохранено
SystemDefault = По умолчанию
ThemePath = Путь к темам
ThemepathChanged = путь к темам изменён
Themepathchange = изменить путь к темам
Titlestxtpath = путь к titles.txt
Titlestxtpathchange = изменить путь к titles.txt
TitlestxtpathChanged = путь к titles.txt изменён
Try = Попытка
Tooltips = Подсказки
Timeleft = Осталось времени:
Unlock = Разблокировать
Unicodefix = фикс Unicode
Uninstall = Деинсталлировать
USBLoaderisprotected = USB Loader GX заблокирован
USBDevicenotfound = USB устройство не найдено
VideoMode = Видео режим
VIDTVPatch = патч VIDTV
Volume = Громкость
Waiting = Ожидание...
WaitingforUSBDevice = Ожидание USB устройства
WidescreenFix = Широкоформатный фикс
WiiMenu = Меню Wii
WrongPassword = Неверный пароль
Yes = Да
YoudonthavecIOS = У вас не установлен cIOS222
Japanese = Японский
German = Немецкий
English = Английский
French = Французский
Spanish = Испанский
Italian = Итальянский
Dutch = Голландский
SChinese = Упрощенный китайский
TChinese = Традиционный китайский
Korean = Корейский
Russian = Русский

View File

@ -1,178 +0,0 @@
Specialthanksto = 特别感谢
t3Coverst = 3D 封面
AppLanguage = 语言设定
Areyousure = 确定?
AutoPatch = 自动选择
Back = 返回
BacktoHBCorWiiMenu = 返回 HBC 或 Wii 系统菜单
BacktoLoader = 返回 Loader
BacktoWiiMenu = 返回 Wii 系统菜单
BootStandard = 启动/标准
BothBoth = 全部
Cantcreatedirectory = 无法建立目录
Cancel = 取消
Cantbeformated = 无法格式化
Cantdelete = 无法删除:
ClicktoDownloadCovers = 点击下载封面
Clock = 时钟
Continueinstallgame = 继续安装游戏?
ConsoleDefault = 主机默认
Consoleshouldbeunlockedtomodifyit = 需解锁以开启设定功能.
ConsoleLocked = 主机锁定
CorrectPassword = 密码正确
Couldnotinitializenetwork = 无法启动网络!
CouldnotopenDisc = 无法开启光盘
CouldnotinitializeDIPmodule = 无法启动 DIP 模块!
CoverDownload = 下载封面
CoverPath = 封面存放路径
CoverpathChanged = 封面路径已变更
Coverpathchange = 变更封面存放路径
Credits = Credits
DiscImages = DVD封面
DiscimagePath = 菜单封面存放路径
DiscpathChanged = DVD封面路径已变更
Discpathchange = 变更DVD封面存放路径
DiscDefault = 游戏默认
Display = 显示
Doyouwanttoformat = 是否格式化:
Doyoureallywanttodelete = 确定删除:
Doyouwanttoretryfor30secs = 是否等待30秒重试?
Downloadingfile = 下载文件:
DownloadBoxartimage = 下载封面图片?
Downloadfinished = 下载完成
Error = 错误 !
BOOTERROR = 启动错误
ErrorreadingDisc = 读取光盘错误
ExitUSBISOLoader = 离开 USB Loader GX?
InitializingNetwork = 正在启动网络
InsertDisk = 插入光盘
InsertaWiiDisc = 插入 Wii 光盘!
InsertaSDCardtodownloadimages = 插入 SD 卡下载封面.
InsertaSDCardtosave = 插入SD卡保存.
InstallRenameandDeleteareunlocked = USB Loader GX 功能已解锁.
Installerror = 安装错误!
Installagame = 安装游戏
Installinggame = 正在安装游戏:
Failedtoboot = 无法启动:
FailedtomountfrontSDcard = 挂载前端 SD 卡失败
FailedtosetUSB = 无法设定 USB:
Failedformating = 格式化失败
filesnotfoundontheserver = 服务器中无此文件!
filesleft = 剩余文件
FlipX = 按键规则
Force = 强制
Youneedtoformatapartition = 必须格式化一个分区
Format = 格式化
Formattingpleasewait = 格式化中, 请稍候...
formated = 完成格式化!
free = 剩余
FreeSpace = 剩余空间
FullShutdown = 完全关机
GameID = 游戏ID
Games = 游戏
Gameisalreadyinstalled = 已安装过游戏:
GameRegion = 区域
GameSize = 游戏容量
GoBack = 返回
GotoPage = 前往页面
HowtoShutdown = 如何关机?
Language = 语言
Langchange = 变更语言
Left = 左
LikeSysMenu = 同系统选单
LoadingincIOS = 以 cIOS249 载入
Lock = 锁定
LockConsole = 锁定控制台
MP3Menu = MP3 选单
Missingfiles = 缺少的文件
Networkiniterror = 网络启动错误
Neither = 全不
Next = 往后
No = 否
Nofilemissing = 没有缺少的文件!
NoHDDfound = 找不到硬盘!
NoSDcardinserted = 未插入 SD 卡!
Nopartitionsfound = 找不到分区
NoUSBDevice = 没有 USB 设备
NoWBFSpartitionfound = 找不到 WBFS 分区
NormalCovers = 一般封面
Normal = 一般
NotaWiiDisc = 不是 Wii 的光盘
NoUSBDevicefound = 找不到 USB 设备.
Notenoughfreespace = 剩余空间不足!
notset = 未设定
of = 的
OFF = 关闭
OfficialSite = 官方网址
ok = 确定
ON = 开启
Parentalcontrol = 家长控制
Partition = 分区
Password = 密码
PasswordChanged = 密码已变更
Passwordhasbeenchanged = 密码已被变更
Passwordchange = 变更密码
PowerofftheWii = 关闭Wii主机
Prev = 往前
PromptsButtons = 显示校正
ReloadSD = 重新载入SD卡
RenameGameonWBFS = 改变WBFS(硬盘)上的游戏名称
Restart = 重新启动
Return = 返回
ReturntoWii = 返回Wii系统菜单
Right = 右
Rumble = 震动
QuickBoot = 快速启动
Save = 保存
SaveFailed = 保存失败
Specialthanksto = 特别感谢
For = 的
theUSBLoaderandreleasingthesourcecodethe = 放出原代码
secondsleft = 剩余秒数
SelectthePartition = 选择分区
youwanttoformat = 是否格式化
settings = 设置
ShutdowntoIdle = 进入待机状态
ShutdownSystem = 关闭系统
Success = 成功:
Successfullyinstalled = 成功的安装:
Successfullydeleted = 成功的删除:
SuccessfullySaved = 保存成功
SystemDefault = 系统默认
ThemePath = 主题存放路径
ThemepathChanged = 主题路径已变更
Themepathchange = 变更主题存放路径
Try = 尝试
Tooltips = 工具提示
Timeleft = 剩余时间:
Unlock = 解锁
Uninstall = 删除
USBLoaderisprotected = USB Loader GX 被锁定
USBDevicenotfound = 找不到 USB 设备
VideoMode = 视频制式
VIDTVPatch = VIDTV 修改
Volume = 音量
Waiting = 等待中...
WaitingforUSBDevice = 等待 USB 设备
WidescreenFix = 宽屏校正
WiiMenu = Wii 系统菜单
WrongPassword = 密码错误
Yes = 是
YoudonthavecIOS = 未安装 cIOS222
Japanese = 日文
German = 德文
English = 英文
French = 法文
Spanish = 西班牙文
Italian = 意大利文
Dutch = 荷文
SChinese = 简体中文
TChinese = 繁体中文
Korean = 韩文
keyboard = 键盘
Unicodefix = Unicode 修正
Filenotfound = 找不到文件
Loadingstandardlanguage = 载入标准语言
Titlestxtpath = Titles.txt 存放路径
TitlestxtpathChanged = titles.txt 路径已变更
Titlestxtpathchange = 变更 titles.txt 存放路径

View File

@ -1,194 +0,0 @@
t3Covers = Carátulas 3D
addToFavorite = Favoritos
all = Alfabético
AppLanguage = Idioma Aplic.
Areyousure = ¿Estás seguro?
AutoPatch = Auto-Parchear
Back = Volver
Backgroundmusic = Música de fondo
Backgroundmusicpath = Ruta a Música cambiada
BacktoHBCorWiiMenu = Volver a HBC o Menú Wii
BacktoLoader = Volver al HBC
BacktoWiiMenu = Volver a Menú Wii
BootStandard = Inicio/Estandar
Both = Ambos
Cantcreatedirectory = No se creó directorio
Cancel = Cancelar
Cantbeformated = No se pudo formatear
Cantdelete = No se eliminó:
ClicktoDownloadCovers = Click para bajar Carátulas
Clock = Reloj
Close = Cerrar
Continueinstallgame = ¿Continuar instalando juego?
ConsoleDefault = Pred. Consola
Consoleshouldbeunlockedtomodifyit = Debes desbloquear la consola para modificar.
ConsoleLocked = Consola Bloqueada
CorrectPassword = Contraseña Correcta
Couldnotinitializenetwork = ¡No se pudo iniciar la Conexión!
CouldnotopenDisc = No se puede abrir Disco
CouldnotinitializeDIPmodule = ¡No se pudo iniciar módulo DIP!
CoverDownload = Descarga de Carátulas
CoverPath = Ruta Carátulas
CoverpathChanged = Ruta de Carátulas cambiada
Coverpathchange = Cambio ruta Carátulas
count = Veces Jugadas
Credits = Créditos
DiscImages = Imágen Discos
DiscimagePath = Ruta Img. Disco
DiscpathChanged = Ruta Img. Disco cambiada
Discpathchange = Cambio ruta Img. Disco
DiscDefault = Pred. Disco
Display = Mostrar
Doyouwanttoformat = Quieres formatear:
Doyoureallywanttodelete = ¿Realmente quieres borrar?:
Doyouwanttoretryfor30secs = ¿Quiéres reintentar por 30 segs.?
Downloadingfile = Descargando archivo:
DownloadBoxartimage = ¿Descargar Imágenes?
Downloadfinished = Descarga completa
Error = ¡Error!
BOOTERROR = ERROR DE INICIO
ErrorreadingDisc = Error leyendo Disco
ExitUSBISOLoader = ¿Salir de USB Loader GX?
Homemenu = Menú de Inicio
InitializingNetwork = Iniciando Conexión
InsertDisk = Inserta el Disco
InsertaWiiDisc = ¡Inserta un Disco Wii!
InsertaSDCardtodownloadimages = Insertar SD para bajar imágenes.
InsertaSDCardtosave = Insertar SD para guardar.
InsertaSDCardtousethatoption = Insertar SD para usar esta opción
InstallRenameandDeleteareunlocked = Todas las caracteristicas del USB Loader GX desbloqueadas.
Installerror = ¡Error de Instalación!
Installagame = Instalar un juego
Installinggame = Instalando juego:
Failedtoboot = Fallo al iniciar:
FailedtomountfrontSDcard = Fallo al montar SD
FailedtosetUSB = Fallo al iniciar USB:
Failedformating = Fallo al formatear
fave = Favoritos
Filenotfound = Archivo no encontrado.
filesnotfoundontheserver = ¡ Archivo(s) no encontrado(s) en el servidor!
filesleft = archivo(s) restante(s)
FlipX = Desplazamiento X
Force = Forzar
Youneedtoformatapartition = Necesitas formatear una partición
Format = Formateo
Formattingpleasewait = Formateando, por favor espera...
formated = ¡formateado!
free = libres
FreeSpace = Espacio Libre
FullShutdown = Apagado Total
GameID = ID de Juego
Games = Juegos
Gameisalreadyinstalled = El juego ya estaba instalado:
GameRegion = Región
GameSize = Tamaño del Juego
GoBack = Volver
//GotoPage = Ir a Página
HowtoShutdown = ¿Cómo Apagar?
hour = Horas
Keyboard = Teclado
Language = Idioma
Langchange = Cambio de Idioma
Left = Izquierda
LikeSysMenu = Como Menú Sist.
LoadingincIOS = Cargando en cIOS249
ListSort = Ordenar juegos
Loadingstandardlanguage = Cargando idioma estandar.
Loadingstandardmusic = Cargando música estandar.
Lock = Bloquear
LockConsole = Bloquear consola
MP3Menu = Menú MP3
Missingfiles = Archivo(s) faltante(s)
Networkiniterror = Error inicio conexión
Neither = Ninguno
Next = Siguiente
No = No
Nofilemissing = ¡No faltan archivos!
NoHDDfound = ¡HDD no encontrado!
NoSDcardinserted = ¡SD no insertada!
Nopartitionsfound = Particiones no encontradas
NoUSBDevice = USB no encontrado
NoWBFSpartitionfound = Partición WBFS no encontrada
NormalCovers = Carátulas Norm.
Normal = Normal
NotaWiiDisc = No es un Disco Wii
NoUSBDevicefound = USB no encontrado.
Notenoughfreespace = ¡No hay suficiente espacio libre!
Notasupportedformat = Formato no soportado.
notset = no puesto
of = de
OFF = Apagado
OfficialSite = Sitio Oficial
ok = OK
ON = Encendido
Parentalcontrol = Control Parental
Partition = Partición
Password = Contraseña
PasswordChanged = Contraseña cambiada
Passwordhasbeenchanged = Contraseña ha sido cambiada
Passwordchange = Cambio Contraseña
PowerofftheWii = Apagar la Wii
Plays = Veces Jugadas
Prev = Ant.
PromptsButtons = Botones
ReloadSD = Recargar SD
RenameGameonWBFS = Renombrar juego en WBFS
Restart = Reiniciar
Return = Volver
ReturntoWii = Volver a Menú Wii
Right = Derecha
Rumble = Vibración
QuickBoot = Inicio Rápido
Save = Guardar
SaveFailed = Fallo al guardar
Specialthanksto = Agradecimientos a
For = por
theUSBLoaderandreleasingthesourcecodethe = y liberar el código fuente
secondsleft = segundos restantes
SelectthePartition = Selecciona la partición
youwanttoformat = ¿quieres formatear?
settings = Configuración
Setasbackgroundmusic = Poner como música de fondo
Standard = Estandar
ShutdowntoIdle = Apagar a Idle
ShutdownSystem = Apagar Sistema
Success = Conseguido:
Successfullyinstalled = Instalado correctamente:
Successfullydeleted = Borrado correctamente:
SuccessfullySaved = Guardado correctamente
SystemDefault = Pred. Sistema
ThemePath = Ruta del Tema
ThemepathChanged = Ruta de Tema cambiada
Themepathchange = Cambio Ruta de Tema
Titlestxtpath = Ruta Titles.txt
TitlestxtpathChanged = Ruta a titles.txt cambiada.
Titlestxtpathchange = Cambio ruta titles.txt
Try = Intentar
Tooltips = InfoBurbujas
Timeleft = T. restante:
Unlock = Desbloquear
Unicodefix = Párche Unicode
Uninstall = Desinstalar
USBLoaderisprotected = USB Loader GX está protegido
USBDevicenotfound = USB no encontrado
VideoMode = Modo Video
VIDTVPatch = Parche VIDTV
Volume = Volumen
Waiting = Esperando...
WaitingforUSBDevice = Esperando al Dispositivo USB
WidescreenFix = Ajuste panorámico
WiiMenu = Menú de Wii
WrongPassword = Contraseña incorrecta
Yes = Si
YoudonthavecIOS = No tienes un cIOS222
Japanese = Japonés
German = Alemán
English = Inglés
French = Francés
Spanish = Español
Italian = Italiano
Dutch = Holandés
SChinese = Chino Simplif.
TChinese = Chino Tradic.
Korean = Coreano

View File

@ -1,178 +0,0 @@
Specialthanksto = 特別感謝
t3Coverst = 3D 封面
AppLanguage = 語言設定
Areyousure = 確定?
AutoPatch = 自動修改
Back = 返回
BacktoHBCorWiiMenu = 返回 HBC 或 Wii 系統選單
BacktoLoader = 返回 Loader
BacktoWiiMenu = 返回 Wii 系統選單
BootStandard = 啟動/標準
Both = 全部顯示
Cantcreatedirectory = 無法產生目錄
Cancel = 取消
Cantbeformated = 無法格式化
Cantdelete = 無法刪除:
ClicktoDownloadCovers = 點擊進行封面下載
Clock = 時鐘
Continueinstallgame = 繼續安裝遊戲?
ConsoleDefault = 主機預設值
Consoleshouldbeunlockedtomodifyit = 需解鎖以開啟設定功能.
ConsoleLocked = 控制台鎖定
CorrectPassword = 密碼正確
Couldnotinitializenetwork = 無法啟動網路!
CouldnotopenDisc = 無法開啟光碟
CouldnotinitializeDIPmodule = 無法啟動 DIP 模組!
CoverDownload = 下載封面
CoverPath = 封面存放路徑
CoverpathChanged = 封面路徑已變更
Coverpathchange = 變更封面路徑
Credits = Credits
DiscImages = 光碟圖像
DiscimagePath = 光碟圖像路徑
DiscpathChanged = 光碟圖像路徑已變更
Discpathchange = 變更光碟圖像路徑
DiscDefault = 光碟預設
Display = 顯示
Doyouwanttoformat = 是否格式化:
Doyoureallywanttodelete = 確定刪除:
Doyouwanttoretryfor30secs = 是否等待30秒重試?
Downloadingfile = 下載檔案:
DownloadBoxartimage = 下載外盒封面圖片?
Downloadfinished = 下載完成
Error = 錯誤 !
BOOTERROR = 啟動錯誤
ErrorreadingDisc = 讀取光碟錯誤
ExitUSBISOLoader = 離開 USB Loader GX?
InitializingNetwork = 正在啟動網路
InsertDisk = 插入光碟
InsertaWiiDisc = 插入 Wii 光碟!
InsertaSDCardtodownloadimages = 插入 SD 卡下載封面.
InsertaSDCardtosave = 插入SD卡儲存.
InstallRenameandDeleteareunlocked = USB Loader GX 功能已解鎖.
Installerror = 安裝錯誤!
Installagame = 安裝遊戲
Installinggame = 正在安裝遊戲:
Failedtoboot = 無法啟動:
FailedtomountfrontSDcard = 掛載前端 SD 卡失敗
FailedtosetUSB = 無法設定 USB:
Failedformating = 格式化失敗
filesnotfoundontheserver = 伺服器中無此檔案!
filesleft = 剩下的檔案
FlipX = 按鍵規則
Force = 強制
Youneedtoformatapartition = 必須格式化一個磁區
Format = 格式化
Formattingpleasewait = 格式化中, 請稍候...
formated = 完成格式化!
free =
FreeSpace = 剩餘空間
FullShutdown = 完全關機
GameID = 遊戲代碼
Games = 遊戲數量
Gameisalreadyinstalled = 已安裝過遊戲:
GameRegion = 遊戲區碼
GameSize = 遊戲容量
GoBack = 返回
//GotoPage = 前往頁面
HowtoShutdown = 如何關機?
Keyboard = 鍵盤
Language = 語言
Langchange = 變更語言
Left = 左
LikeSysMenu = 同系統選單
LoadingincIOS = 以 cIOS249 載入
Lock = 鎖定
LockConsole = 鎖定控制台
MP3Menu = MP3 選單
Missingfiles = 遺失的檔案
Networkiniterror = 網路啟動錯誤
Neither = 皆不顯示
Next = 往後
No = 否
Nofilemissing = 沒有缺少的檔案!
NoHDDfound = 找不到硬碟!
NoSDcardinserted = 未插入 SD 卡!
Nopartitionsfound = 找不到磁區
NoUSBDevice = 沒有 USB 裝置
NoWBFSpartitionfound = 找不到 WBFS 磁區
NormalCovers = 一般封面
Normal = 一般
NotaWiiDisc = 不是 Wii 的光碟
NoUSBDevicefound = 找不到 USB 裝置.
Notenoughfreespace = 剩餘空間不足!
notset = 未設定
of = 剩餘空間 總容量
OFF = 關閉
OfficialSite = 官方網址
ok = 確定
ON = 開啟
Parentalcontrol = 親子控制
Partition = 磁區
Password = 密碼
PasswordChanged = 密碼已變更
Passwordhasbeenchanged = 密碼已被變更
Passwordchange = 變更密碼
PowerofftheWii = 關閉Wii主機
Prev = 往前
PromptsButtons = 顯示校正
ReloadSD = 重新載入SD卡
RenameGameonWBFS = 改變WBFS上的遊戲名稱
Restart = 重新啟動
Return = 返回
ReturntoWii = 返回Wii系統選單
Right = 右
Rumble = 震動
QuickBoot = 快速啟動
Save = 儲存
SaveFailed = 儲存失敗
Specialthanksto = 特別感謝
For = 的
theUSBLoaderandreleasingthesourcecodethe = 釋出原始碼
secondsleft = 剩餘秒數
SelectthePartition = 選擇磁區
youwanttoformat = 是否格式化
settings = 設定
ShutdowntoIdle = 進入待機狀態
ShutdownSystem = 關閉系統
Success = 成功:
Successfullyinstalled = 成功的安裝:
Successfullydeleted = 成功的刪除:
SuccessfullySaved = 儲存成功
SystemDefault = 系統預設值
ThemePath = 背景主題
ThemepathChanged = 背景主題路徑已變更
Themepathchange = 變更背景主題路徑
Try = 嘗試
Tooltips = 工具提示
Timeleft = 剩餘時間:
Unlock = 解鎖
Uninstall = 移除
USBLoaderisprotected = USB Loader GX 被鎖定
USBDevicenotfound = 找不到 USB 裝置
VideoMode = 影像格式
VIDTVPatch = VIDTV 修改
Volume = 音量
Waiting = 等待中...
WaitingforUSBDevice = 等待 USB 裝置
WidescreenFix = 寬螢幕校正
WiiMenu = Wii 系統選單
WrongPassword = 密碼錯誤
Yes = 是
YoudonthavecIOS = 未安裝 cIOS222
Japanese = 日文
German = 德文
English = 英文
French = 法文
Spanish = 西班牙文
Italian = 義大利文
Dutch = 荷文
SChinese = 簡體中文
TChinese = 繁體中文
Korean = 韓文
Unicodefix = Unicode 修正
Filenotfound = 找不到檔案
Loadingstandardlanguage = 載入標準語言
Titlestxtpath = Titles.txt 路徑
TitlestxtpathChanged = titles.txt 路徑已變更
Titlestxtpathchange = 變更 titles.txt 路徑

View File

@ -1,172 +0,0 @@
Specialthanksto = Özel tesekkürler :
t3Covers = 3B Kapaklar
AppLanguage = Program Lisani
Areyousure = Emin misiniz?
AutoPatch = OtoYama
Back = Geri
BacktoHBCorWiiMenu = HBC veya Wii Menüye dönüs
BacktoLoader = Yükleyiciye dönüs
BacktoWiiMenu = Wii Menüye dönüs
BootStandard = Boot/Standard
BothBoth = Ikisi de
Cantcreatedirectory = Klasör olusturulamiyorF
Cancel = Iptal
Cantbeformated = Biçimlendirilemiyor
Cantdelete = Silinemiyor
ClicktoDownloadCovers = Kapaklari Indirmek için Tiklayin
Clock = Saat
Continueinstallgame = Oyunu kurmaya devam et?
ConsoleDefault = Konsol Ayari
Consoleshouldbeunlockedtomodifyit = Degistirmek için konsolun kilidini açmalisin.
ConsoleLocked = Konsol Kilitli
CorrectPassword = Dogru Sifre
Couldnotinitializenetwork = Aga baglanilamiyor!
CouldnotopenDisc = Disk açilamiyor
CouldnotinitializeDIPmodule = DIP modülü baslatilamiyor!
CoverDownload = Kapak Indirme
CoverPath = Kapak Yolu
CoverpathChanged = Kapak Yolu Degistir
Coverpathchange = Kapak Yolunu Degistir
Credits = Emegi Geçenler
DiscImages = Disk Resimleri
DiscimagePath = Disk Resimleri Yolu
DiscpathChanged = Disk Resimleri Yolu Degistirildi
Discpathchange = Disk Resimleri Yolunu Degistir
DiscDefault = Disk Ayari
Display = Görüntü
Doyouwanttoformat = Formatlamak istiyor musunuz:
Doyoureallywanttodelete = Gerçekten silmek istiyor musunuz:
Doyouwanttoretryfor30secs = 30 saniye sonra denemek ister misiniz?
Downloadingfile = Indirilen dosya:
DownloadBoxartimage = Kutu resmini indirmek ister misiniz?
Downloadfinished = Indirme tamamlandi
Error = Hata !
BOOTERROR = AÇILIS HATASI
ErrorreadingDisc = Disk Okuma Hatasi
ExitUSBISOLoader = USB Loader GX'dan çik?
InitializingNetwork = Aga Baglaniliyor
InsertDisk = Diski Takin
InsertaWiiDisc = Wii Diski Takin!
InsertaSDCardtodownloadimages = Resimleri indirebilmek için SD-Card takin.
InsertaSDCardtosave = Kaydedebilmek için SD-Card takin.
InstallRenameandDeleteareunlocked = USB Loader GX'in tüm özellikleri kilitli.
Installerror = Yükleme Hatasi!
Installagame = Oyun yükle
Installinggame = Yüklenen oyun:
Failedtoboot = Açilamadi:
FailedtomountfrontSDcard = SD-card monte edilemedi
FailedtosetUSB = USB ayarlamasi basarisiz oldu:
Failedformating = Biçimlendirme basarisiz oldu
filesnotfoundontheserver = dosyalar sunucuda bulunamadi!
filesleft = dosya kaldi
FlipX = Flip-X
Force = Zorla
Youneedtoformatapartition = Bir bölüm biçimlendirmeniz gerekiyor
Format = Biçimlendir
Formattingpleasewait = Biçimlendiriliyor, bekleyiniz...
formated = biçimlendirildi!
free = bos
FreeSpace = Bos Yer
FullShutdown = Tam Kapama
GameID = Oyun ID
Games = Oyunlar
Gameisalreadyinstalled = Oyun zaten yüklü:
GameRegion = Bölge
GameSize = Oyun Boyutu
GoBack = Geri Dön
//GotoPage = Sayfaya Git
HowtoShutdown = Nasil Kapansin?
Language = Lisan
Langchange = Lisan degistirme
Left = Sol
LikeSysMenu = Sistem Menüsü Gibi
LoadingincIOS = cIOS249'dan yükleme
Lock = Kilitle
LockConsole = Konsolu Kilitle
MP3Menu = MP3 Menüsü
Missingfiles = Kayip dosyalar
Networkiniterror = Ag baslatma hatasi
Neither = Hiçbiri
Next = Ileri
No = Hayir
Nofilemissing = Kayip dosya yok!
NoHDDfound = HDD bulunamadi!
NoSDcardinserted = SD-Card takili degil!
Nopartitionsfound = Bölüm bulunamadi
NoUSBDevice = USB Aygiti bulunamadi
NoWBFSpartitionfound = WBFS bölümü bulunamadi
NormalCovers = Normal Kapaklar
Normal = Normal
NotaWiiDisc = Wii Diski Degil
NoUSBDevicefound = USB Aygiti bulunamadi
Notenoughfreespace = Gerekli bos yer yok!
notset = ayarlanmadi
of = /
OFF = KAPALI
OfficialSite = Resmi Site
ok = OK
ON = AÇIK
Parentalcontrol = Ebeveyn kontrolü
Partition = Bölüm
Password = Parola
PasswordChanged = Parola degistirildi
Passwordhasbeenchanged = Password has been changed
Passwordchange = Password change
PowerofftheWii = Wii'yi kapat
Prev = Önceki
PromptsButtons = Hiz ve Butonlar
ReloadSD = SD-Card'i yeniden oku
RenameGameonWBFS = WBFS'deki oyunu yeniden isimlendir
Restart = Yeniden Baslat
Return = Dönüs
ReturntoWii = Wii Menü'ye Dönüs
Right = Sag
Rumble = Titresim
QuickBoot = Hizli Açilis
Save = Kaydet
SaveFailed = Kaydetme Basarisiz
Specialthanksto = Özel tesekkürler
For = ,
theUSBLoaderandreleasingthesourcecodethe = kaynak kodunu açtigi için
secondsleft = saniye kaldi
SelectthePartition = Bölümü Seçin
youwanttoformat = biçimlendirmek istiyorsunuz
settings = Ayarlar
ShutdowntoIdle = Yari Kapat
ShutdownSystem = Tam Kapat
Success = Basarili:
Successfullyinstalled = Basariyla yüklendi:
Successfullydeleted = Basariyla silindi:
SuccessfullySaved = Basariyla Kaydedildi
SystemDefault = Sistem Ayari
ThemePath = Tema Yolu
ThemepathChanged = Tema Yolu Degisti
Themepathchange = Tema yolunu degistir
Try = Dene
Tooltips = Yardimlar
Timeleft = Kalan zaman:
Unlock = Kilidi Kaldir
Uninstall = Sil
USBLoaderisprotected = USB Loader GX koruma altinda
USBDevicenotfound = USB Aygiti bulunamadi
VideoMode = Video Modu
VIDTVPatch = VIDTV Yamasi
Volume = Ses
Waiting = Bekliyor...
WaitingforUSBDevice = USB Aygiti için Bekleniyor
WidescreenFix = Genisekran Çözümü
WiiMenu = Wii Menü
WrongPassword = Yanlis Parola
Yes = Evet
YoudonthavecIOS = cIOS222'ye sahip degilsiniz
Japanese = Japonca
German = Almanca
English = Ingilizce
French = Fransizca
Spanish = Ispanyolca
Italian = Italyanca
Dutch = Hollandaca
SChinese = Basitlestirilmis Çince
TChinese = Geleneksel Çince
Korean = Korece
Turkish = Türkçe

306
Makefile
View File

@ -1,155 +1,151 @@
#---------------------------------------------------------------------------------
# Clear the implicit built in rules
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
endif
include $(DEVKITPPC)/wii_rules
#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET := boot
BUILD := build
SOURCES := source source/libwiigui source/images source/fonts source/sounds source/libwbfs
INCLUDES := source
SVNDEV := -D'SVN_REV="$(shell svnversion -n ..)"'
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
CFLAGS = -g -O2 -Wall $(SVNDEV) $(MACHDEP) $(INCLUDE)
CXXFLAGS = -save-temps -Xassembler -aln=$@.lst $(CFLAGS)
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80a00100
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS := -lfat -lpngu -lpng -lmetaphrasis -lm -lz -lwiiuse -lmad -lbte -lasnd -logc -ltremor -lfreetype
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS := $(DEVKITPPC)/lib $(CURDIR)
#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
#---------------------------------------------------------------------------------
export OUTPUT := $(CURDIR)/$(TARGETDIR)/$(TARGET)
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
export DEPSDIR := $(CURDIR)/$(BUILD)
#---------------------------------------------------------------------------------
# automatically build a list of object files for our project
#---------------------------------------------------------------------------------
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
TTFFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.ttf)))
PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png)))
OGGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.ogg)))
PCMFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.pcm)))
#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),)
export LD := $(CC)
else
export LD := $(CXX)
endif
export OFILES := $(addsuffix .o,$(BINFILES)) \
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \
$(sFILES:.s=.o) $(SFILES:.S=.o) \
$(TTFFILES:.ttf=.ttf.o) $(PNGFILES:.png=.png.o) \
$(OGGFILES:.ogg=.ogg.o) $(PCMFILES:.pcm=.pcm.o)
#---------------------------------------------------------------------------------
# build a list of include paths
#---------------------------------------------------------------------------------
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
-I$(CURDIR)/$(BUILD) \
-I$(LIBOGC_INC)
#---------------------------------------------------------------------------------
# build a list of library paths
#---------------------------------------------------------------------------------
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
-L$(LIBOGC_LIB)
export OUTPUT := $(CURDIR)/$(TARGET)
.PHONY: $(BUILD) clean
#---------------------------------------------------------------------------------
$(BUILD):
@[ -d $@ ] || mkdir -p $@
@make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
#---------------------------------------------------------------------------------
clean:
@echo clean ...
@rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol
#---------------------------------------------------------------------------------
run:
wiiload $(OUTPUT).dol
#---------------------------------------------------------------------------------
reload:
wiiload -r $(OUTPUT).dol
#---------------------------------------------------------------------------------
release:
make
cp boot.dol ./hbc/boot.dol
#---------------------------------------------------------------------------------
else
DEPENDS := $(OFILES:.o=.d)
#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT).dol: $(OUTPUT).elf
$(OUTPUT).elf: $(OFILES)
#---------------------------------------------------------------------------------
# This rule links in binary data with .ttf, .png, and .mp3 extensions
#---------------------------------------------------------------------------------
%.ttf.o : %.ttf
@echo $(notdir $<)
$(bin2o)
%.png.o : %.png
@echo $(notdir $<)
$(bin2o)
%.ogg.o : %.ogg
@echo $(notdir $<)
$(bin2o)
%.pcm.o : %.pcm
@echo $(notdir $<)
$(bin2o)
-include $(DEPENDS)
#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------
#---------------------------------------------------------------------------------
# Clear the implicit built in rules
#---------------------------------------------------------------------------------
.SUFFIXES:
#---------------------------------------------------------------------------------
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
endif
include $(DEVKITPPC)/wii_rules
#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET := boot
BUILD := build
SOURCES := source source/images
DATA := data
INCLUDES :=
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
CFLAGS = -g -O3 -Wall $(MACHDEP) $(INCLUDE)
CXXFLAGS = $(CFLAGS)
#---------------------------------------------------------------------------------
# move loader to another location - THANKS CREDIAR - 0x81330000 for HBC
#---------------------------------------------------------------------------------
#LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--section-start,.init=0x81000000
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map
#LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--section-start,.init=0x80003f00
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS := -lfat -lntfs -lext2fs -lpng -lz -lbte -logc -lm
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS := $(CURDIR)
#---------------------------------------------------------------------------------
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR)))
#---------------------------------------------------------------------------------
export OUTPUT := $(CURDIR)/$(TARGET)
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
export DEPSDIR := $(CURDIR)/$(BUILD)
#---------------------------------------------------------------------------------
# automatically build a list of object files for our project
#---------------------------------------------------------------------------------
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png)))
DOLFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.dol)))
ELFFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.elf)))
#---------------------------------------------------------------------------------
# use CXX for linking C++ projects, CC for standard C
#---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),)
export LD := $(CC)
else
export LD := $(CXX)
endif
export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \
$(sFILES:.s=.o) $(SFILES:.S=.o) \
$(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES))
#---------------------------------------------------------------------------------
# build a list of include paths
#---------------------------------------------------------------------------------
export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
-I$(CURDIR)/$(BUILD) \
-I$(LIBOGC_INC) -I$(PORTLIBS)/include
#---------------------------------------------------------------------------------
# build a list of library paths
#---------------------------------------------------------------------------------
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
-L$(LIBOGC_LIB) -L$(PORTLIBS)/lib
export OUTPUT := $(CURDIR)/$(TARGET)
.PHONY: $(BUILD) clean
#---------------------------------------------------------------------------------
$(BUILD):
@[ -d $@ ] || mkdir -p $@
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
#---------------------------------------------------------------------------------
clean:
@echo clean ...
@rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol
#---------------------------------------------------------------------------------
run:
wiiload $(TARGET).dol
#---------------------------------------------------------------------------------
pack:
zip -9 loadMii.zip $(TARGET).dol ../icon.png ../meta.xml ../README
#---------------------------------------------------------------------------------
else
DEPENDS := $(OFILES:.o=.d)
#---------------------------------------------------------------------------------
# main targets
#---------------------------------------------------------------------------------
$(OUTPUT).dol: $(OUTPUT).elf
$(OUTPUT).elf: $(OFILES)
#---------------------------------------------------------------------------------
# This rule links in binary data with the .jpg extension
#---------------------------------------------------------------------------------
%.png.o : %.png
@echo $(notdir $<)
@bin2s -a 32 $< | $(AS) -o $(@)
%.bin.o : %.bin
@echo $(notdir $<)
@bin2s -a 32 $< | $(AS) -o $(@)
-include $(DEPENDS)
#---------------------------------------------------------------------------------
endif
#---------------------------------------------------------------------------------

BIN
data/app_booter.bin Normal file

Binary file not shown.

1
forwarder.pnproj Normal file
View File

@ -0,0 +1 @@
<Project name="Forwarder"><Folder name="source"><Folder name="images"><File path="source\images\background.png"></File><File path="source\images\background169.png"></File></Folder><File path="source\cfg.c"></File><File path="source\cfg.h"></File><File path="source\dolloader.c"></File><File path="source\dolloader.h"></File><File path="source\elfloader.c"></File><File path="source\elfloader.h"></File><File path="source\elf_abi.h"></File><File path="source\fatmounter.c"></File><File path="source\fatmounter.h"></File><File path="source\filelist.h"></File><File path="source\main.cpp"></File><File path="source\video.cpp"></File><File path="source\video.h"></File></Folder><File path="Makefile"></File></Project>

1
forwarder.pnps Normal file
View File

@ -0,0 +1 @@
<pd><ViewState><e p="Forwarder" x="true"></e><e p="Forwarder\source" x="false"></e></ViewState></pd>

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
<pd><ViewState><e p="gui" x="true"></e><e p="gui\source" x="true"></e><e p="gui\source\fonts" x="false"></e><e p="gui\source\images" x="false"></e><e p="gui\source\libwbfs" x="false"></e><e p="gui\source\libwiigui" x="true"></e><e p="gui\source\sounds" x="false"></e></ViewState></pd>

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +0,0 @@
#ifndef CH2UNICODE_H_
#define CH2UNICODE_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
int CH2Unicode(char *szFrom,wchar_t *wszTo); //,int ctype);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,791 +0,0 @@
/*
* FreeTypeGX is a wrapper class for libFreeType which renders a compiled
* FreeType parsable font into a GX texture for Wii homebrew development.
* Copyright (C) 2008 Armin Tamzarian
* Modified by Tantric, 2009
*
* This file is part of FreeTypeGX.
*
* FreeTypeGX is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FreeTypeGX 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with FreeTypeGX. If not, see <http://www.gnu.org/licenses/>.
*/
#include "FreeTypeGX.h"
#include "CH2Unicode.h"
#include "GB2Unicode.h"
#include "main.h"
#include "cfg.h"
/*! \struct ftgxCharData_
*
* Font face character glyph relevant data structure.
*/
typedef struct ftgxCharData_ {
int16_t renderOffsetX; /**< Texture X axis bearing offset. */
uint16_t glyphAdvanceX; /**< Character glyph X coordinate advance in pixels. */
uint16_t glyphIndex; /**< Charachter glyph index in the font face. */
uint16_t textureWidth; /**< Texture width in pixels/bytes. */
uint16_t textureHeight; /**< Texture glyph height in pixels/bytes. */
int16_t renderOffsetY; /**< Texture Y axis bearing offset. */
int16_t renderOffsetMax; /**< Texture Y axis bearing maximum value. */
int16_t renderOffsetMin; /**< Texture Y axis bearing minimum value. */
uint32_t* glyphDataTexture; /**< Glyph texture bitmap data buffer. */
} ftgxCharData;
/*! \struct ftgxDataOffset_
*
* Offset structure which hold both a maximum and minimum value.
*/
typedef struct ftgxDataOffset_ {
int16_t ascender; /**< Maximum data offset. */
int16_t descender; /**< Minimum data offset. */
int16_t max; /**< Maximum data offset. */
int16_t min; /**< Minimum data offset. */
} ftgxDataOffset;
/**
* Default constructor for the FreeTypeGX class.
*
* @param textureFormat Optional format (GX_TF_*) of the texture as defined by the libogc gx.h header file. If not specified default value is GX_TF_RGBA8.
* @param vertexIndex Optional vertex format index (GX_VTXFMT*) of the glyph textures as defined by the libogc gx.h header file. If not specified default value is GX_VTXFMT1.
*/
FreeTypeGX::FreeTypeGX(uint8_t textureFormat, uint8_t vertexIndex) {
FT_Init_FreeType(&this->ftLibrary);
this->textureFormat = textureFormat;
this->setVertexFormat(vertexIndex);
this->setCompatibilityMode(FTGX_COMPATIBILITY_NONE);
}
/**
* Default destructor for the FreeTypeGX class.
*/
FreeTypeGX::~FreeTypeGX() {
this->unloadFont();
}
/**
* Convert a short char sctring to a wide char string.
*
* This routine converts a supplied shot character string into a wide character string.
* Note that it is the user's responsibility to clear the returned buffer once it is no longer needed.
*
* @param strChar Character string to be converted.
* @return Wide character representation of supplied character string.
*/
wchar_t* FreeTypeGX::charToWideChar(char* strChar) {
wchar_t *strWChar;
strWChar = new wchar_t[strlen(strChar) + 1];
if(Settings.unicodefix == 1) {
CH2Unicode(strChar, strWChar);
} else if(Settings.unicodefix == 2) {
ConverGB2Unicode(strChar, strWChar);
} else {
char *tempSrc = strChar;
wchar_t *tempDest = strWChar;
while((*tempDest++ = *tempSrc++));
}
return strWChar;
}
/**
*
* \overload
*/
wchar_t* FreeTypeGX::charToWideChar(const char* strChar) {
return FreeTypeGX::charToWideChar((char*) strChar);
}
/**
* Setup the vertex attribute formats for the glyph textures.
*
* This function sets up the vertex format for the glyph texture on the specified vertex format index.
* Note that this function should not need to be called except if the vertex formats are cleared or the specified
* vertex format index is modified.
*
* @param vertexIndex Vertex format index (GX_VTXFMT*) of the glyph textures as defined by the libogc gx.h header file.
*/
void FreeTypeGX::setVertexFormat(uint8_t vertexIndex) {
this->vertexIndex = vertexIndex;
GX_SetVtxAttrFmt(this->vertexIndex, GX_VA_POS, GX_POS_XY, GX_S16, 0);
GX_SetVtxAttrFmt(this->vertexIndex, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0);
GX_SetVtxAttrFmt(this->vertexIndex, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
}
/**
* Sets the TEV and VTX rendering compatibility requirements for the class.
*
* This sets up the default TEV opertion and VTX descriptions rendering values for the class. This ensures that FreeTypeGX
* can remain compatible with external liraries or project code. Certain external libraries or code by design or lack of
* foresight assume that the TEV opertion and VTX descriptions values will remain constant or are always returned to a
* certain value. This will enable compatibility with those libraries and any other code which cannot or will not be changed.
*
* @param compatibilityMode Compatibility descritor (FTGX_COMPATIBILITY_*) as defined in FreeTypeGX.h
*/
void FreeTypeGX::setCompatibilityMode(uint32_t compatibilityMode) {
this->compatibilityMode = compatibilityMode;
}
/**
* Sets the TEV operation and VTX descriptor values after texture rendering it complete.
*
* This function calls the GX_SetTevOp and GX_SetVtxDesc functions with the compatibility parameters specified
* in setCompatibilityMode.
*/
void FreeTypeGX::setDefaultMode() {
if(this->compatibilityMode) {
switch(this->compatibilityMode & 0x00FF) {
case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_MODULATE:
GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE);
break;
case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_DECAL:
GX_SetTevOp(GX_TEVSTAGE0, GX_DECAL);
break;
case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_BLEND:
GX_SetTevOp(GX_TEVSTAGE0, GX_BLEND);
break;
case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_REPLACE:
GX_SetTevOp(GX_TEVSTAGE0, GX_REPLACE);
break;
case FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR:
GX_SetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
break;
default:
break;
}
switch(this->compatibilityMode & 0xFF00) {
case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE:
GX_SetVtxDesc(GX_VA_TEX0, GX_NONE);
break;
case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_DIRECT:
GX_SetVtxDesc(GX_VA_TEX0, GX_DIRECT);
break;
case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX8:
GX_SetVtxDesc(GX_VA_TEX0, GX_INDEX8);
break;
case FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX16:
GX_SetVtxDesc(GX_VA_TEX0, GX_INDEX16);
break;
default:
break;
}
}
}
/**
* Loads and processes a specified true type font buffer to a specific point size.
*
* This routine takes a precompiled true type font buffer and loads the necessary processed data into memory. This routine should be called before drawText will succeed.
*
* @param fontBuffer A pointer in memory to a precompiled true type font buffer.
* @param bufferSize Size of the true type font buffer in bytes.
* @param pointSize The desired point size this wrapper's configured font face.
* @param cacheAll Optional flag to specify if all font characters should be cached when the class object is created. If specified as false the characters only become cached the first time they are used. If not specified default value is false.
*/
uint16_t FreeTypeGX::loadFont(uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll) {
this->unloadFont();
this->ftPointSize = pointSize;
FT_New_Memory_Face(this->ftLibrary, (FT_Byte *)fontBuffer, bufferSize, 0, &this->ftFace);
if(this->ftPointSize > 0)
FT_Set_Pixel_Sizes(this->ftFace, 0, this->ftPointSize);
this->ftSlot = this->ftFace->glyph;
this->ftKerningEnabled = FT_HAS_KERNING(this->ftFace);
if (cacheAll) {
return this->cacheGlyphDataComplete();
}
return 0;
}
/**
*
* \overload
*/
uint16_t FreeTypeGX::loadFont(const uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll) {
return this->loadFont((uint8_t *)fontBuffer, bufferSize, pointSize, cacheAll);
}
/**
* Clears all loaded font glyph data.
*
* This routine clears all members of the font map structure and frees all allocated memory back to the system.
*/
void FreeTypeGX::unloadFont() {
if(this->fontData.size() == 0)
return;
GX_DrawDone();
GX_Flush();
for( std::map<wchar_t, ftgxCharData>::iterator i = this->fontData.begin(); i != this->fontData.end(); i++) {
free(i->second.glyphDataTexture);
}
this->fontData.clear();
}
void FreeTypeGX::changeSize(FT_UInt vPointSize, FT_UInt hPointSize/*=0*/) {
this->unloadFont();
this->ftPointSize = vPointSize;
FT_Set_Pixel_Sizes(this->ftFace, hPointSize, this->ftPointSize);
}
/**
* Adjusts the texture data buffer to necessary width for a given texture format.
*
* This routine determines adjusts the given texture width into the required width to hold the necessary texture data for proper alignment.
*
* @param textureWidth The initial guess for the texture width.
* @param textureFormat The texture format to which the data is to be converted.
* @return The correctly adjusted texture width.
*/
uint16_t FreeTypeGX::adjustTextureWidth(uint16_t textureWidth, uint8_t textureFormat) {
uint16_t alignment;
switch(textureFormat) {
case GX_TF_I4: /* 8x8 Tiles - 4-bit Intensity */
case GX_TF_I8: /* 8x4 Tiles - 8-bit Intensity */
case GX_TF_IA4: /* 8x4 Tiles - 4-bit Intensity, , 4-bit Alpha */
alignment = 8;
break;
case GX_TF_IA8: /* 4x4 Tiles - 8-bit Intensity, 8-bit Alpha */
case GX_TF_RGB565: /* 4x4 Tiles - RGB565 Format */
case GX_TF_RGB5A3: /* 4x4 Tiles - RGB5A3 Format */
case GX_TF_RGBA8: /* 4x4 Tiles - RGBA8 Dual Cache Line Format */
default:
alignment = 4;
break;
}
return textureWidth % alignment == 0 ? textureWidth : alignment + textureWidth - (textureWidth % alignment);
}
/**
* Adjusts the texture data buffer to necessary height for a given texture format.
*
* This routine determines adjusts the given texture height into the required height to hold the necessary texture data for proper alignment.
*
* @param textureHeight The initial guess for the texture height.
* @param textureFormat The texture format to which the data is to be converted.
* @return The correctly adjusted texture height.
*/
uint16_t FreeTypeGX::adjustTextureHeight(uint16_t textureHeight, uint8_t textureFormat) {
uint16_t alignment;
switch(textureFormat) {
case GX_TF_I4: /* 8x8 Tiles - 4-bit Intensity */
alignment = 8;
break;
case GX_TF_I8: /* 8x4 Tiles - 8-bit Intensity */
case GX_TF_IA4: /* 8x4 Tiles - 4-bit Intensity, , 4-bit Alpha */
case GX_TF_IA8: /* 4x4 Tiles - 8-bit Intensity, 8-bit Alpha */
case GX_TF_RGB565: /* 4x4 Tiles - RGB565 Format */
case GX_TF_RGB5A3: /* 4x4 Tiles - RGB5A3 Format */
case GX_TF_RGBA8: /* 4x4 Tiles - RGBA8 Dual Cache Line Format */
default:
alignment = 4;
break;
}
return textureHeight % alignment == 0 ? textureHeight : alignment + textureHeight - (textureHeight % alignment);
}
/**
* Caches the given font glyph in the instance font texture buffer.
*
* This routine renders and stores the requested glyph's bitmap and relevant information into its own quickly addressible
* structure within an instance-specific map.
*
* @param charCode The requested glyph's character code.
* @return A pointer to the allocated font structure.
*/
ftgxCharData *FreeTypeGX::cacheGlyphData(wchar_t charCode) {
FT_UInt gIndex;
uint16_t textureWidth = 0, textureHeight = 0;
gIndex = FT_Get_Char_Index( this->ftFace, charCode );
if (!FT_Load_Glyph(this->ftFace, gIndex, FT_LOAD_DEFAULT )) {
FT_Render_Glyph( this->ftSlot, FT_RENDER_MODE_NORMAL );
if(this->ftSlot->format == FT_GLYPH_FORMAT_BITMAP) {
FT_Bitmap *glyphBitmap = &this->ftSlot->bitmap;
textureWidth = adjustTextureWidth(glyphBitmap->width, this->textureFormat);
textureHeight = adjustTextureHeight(glyphBitmap->rows, this->textureFormat);
this->fontData[charCode] = (ftgxCharData){
this->ftSlot->bitmap_left,
this->ftSlot->advance.x >> 6,
gIndex,
textureWidth,
textureHeight,
this->ftSlot->bitmap_top,
this->ftSlot->bitmap_top,
glyphBitmap->rows - this->ftSlot->bitmap_top,
NULL
};
this->loadGlyphData(glyphBitmap, &this->fontData[charCode]);
return &this->fontData[charCode];
}
}
return NULL;
}
/**
* Locates each character in this wrapper's configured font face and proccess them.
*
* This routine locates each character in the configured font face and renders the glyph's bitmap.
* Each bitmap and relevant information is loaded into its own quickly addressible structure within an instance-specific map.
*/
uint16_t FreeTypeGX::cacheGlyphDataComplete() {
uint16_t i = 0;
FT_UInt gIndex;
FT_ULong charCode = FT_Get_First_Char( this->ftFace, &gIndex );
while ( gIndex != 0 ) {
if(this->cacheGlyphData(charCode) != NULL) {
i++;
}
charCode = FT_Get_Next_Char( this->ftFace, charCode, &gIndex );
}
return i;
}
/**
* Loads the rendered bitmap into the relevant structure's data buffer.
*
* This routine does a simple byte-wise copy of the glyph's rendered 8-bit grayscale bitmap into the structure's buffer.
* Each byte is converted from the bitmap's intensity value into the a uint32_t RGBA value.
*
* @param bmp A pointer to the most recently rendered glyph's bitmap.
* @param charData A pointer to an allocated ftgxCharData structure whose data represent that of the last rendered glyph.
*/
void FreeTypeGX::loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData) {
uint32_t *glyphData = (uint32_t *)memalign(32, charData->textureWidth * charData->textureHeight * 4);
memset(glyphData, 0x00, charData->textureWidth * charData->textureHeight * 4);
for (uint16_t imagePosY = 0; imagePosY < bmp->rows; imagePosY++) {
for (uint16_t imagePosX = 0; imagePosX < bmp->width; imagePosX++) {
uint32_t pixel = (uint32_t) bmp->buffer[imagePosY * bmp->width + imagePosX];
glyphData[imagePosY * charData->textureWidth + imagePosX] = 0x00000000 | (pixel << 24) | (pixel << 16) | (pixel << 8) | pixel;
}
}
switch(this->textureFormat) {
case GX_TF_I4:
charData->glyphDataTexture = Metaphrasis::convertBufferToI4(glyphData, charData->textureWidth, charData->textureHeight);
break;
case GX_TF_I8:
charData->glyphDataTexture = Metaphrasis::convertBufferToI8(glyphData, charData->textureWidth, charData->textureHeight);
break;
case GX_TF_IA4:
charData->glyphDataTexture = Metaphrasis::convertBufferToIA4(glyphData, charData->textureWidth, charData->textureHeight);
break;
case GX_TF_IA8:
charData->glyphDataTexture = Metaphrasis::convertBufferToIA8(glyphData, charData->textureWidth, charData->textureHeight);
break;
case GX_TF_RGB565:
charData->glyphDataTexture = Metaphrasis::convertBufferToRGB565(glyphData, charData->textureWidth, charData->textureHeight);
break;
case GX_TF_RGB5A3:
charData->glyphDataTexture = Metaphrasis::convertBufferToRGB5A3(glyphData, charData->textureWidth, charData->textureHeight);
break;
case GX_TF_RGBA8:
default:
charData->glyphDataTexture = Metaphrasis::convertBufferToRGBA8(glyphData, charData->textureWidth, charData->textureHeight);
break;
}
free(glyphData);
}
/**
* Determines the x offset of the rendered string.
*
* This routine calculates the x offset of the rendered string based off of a supplied positional format parameter.
*
* @param width Current pixel width of the string.
* @param format Positional format of the string.
*/
int16_t FreeTypeGX::getStyleOffsetWidth(uint16_t width, uint16_t format) {
switch(format & FTGX_JUSTIFY_MASK)
{
case FTGX_JUSTIFY_LEFT:
return 0;
default:
case FTGX_JUSTIFY_CENTER:
return -(width >> 1);
case FTGX_JUSTIFY_RIGHT:
return -width;
}
return 0;
}
/**
* Determines the y offset of the rendered string.
*
* This routine calculates the y offset of the rendered string based off of a supplied positional format parameter.
*
* @param offset Current pixel offset data of the string.
* @param format Positional format of the string.
*/
int16_t FreeTypeGX::getStyleOffsetHeight(ftgxDataOffset *offset, uint16_t format)
{
switch(format & FTGX_ALIGN_MASK)
{
case FTGX_ALIGN_TOP:
return offset->ascender;
default:
case FTGX_ALIGN_MIDDLE:
return (offset->ascender + offset->descender + 1) >> 1;
case FTGX_ALIGN_BOTTOM:
return offset->descender;
case FTGX_ALIGN_BASELINE:
return 0;
case FTGX_ALIGN_GLYPH_TOP:
return offset->max;
case FTGX_ALIGN_GLYPH_MIDDLE:
return (offset->max + offset->min + 1) >> 1;
case FTGX_ALIGN_GLYPH_BOTTOM:
return offset->min;
}
return 0;
}
/**
* Processes the supplied text string and prints the results at the specified coordinates.
*
* This routine processes each character of the supplied text string, loads the relevant preprocessed bitmap buffer,
* a texture from said buffer, and loads the resultant texture into the EFB.
*
* @param x Screen X coordinate at which to output the text.
* @param y Screen Y coordinate at which to output the text. Note that this value corresponds to the text string origin and not the top or bottom of the glyphs.
* @param text NULL terminated string to output.
* @param color Optional color to apply to the text characters. If not specified default value is ftgxWhite: (GXColor){0xff, 0xff, 0xff, 0xff}
* @param textStyle Flags which specify any styling which should be applied to the rendered string.
* @return The number of characters printed.
*/
uint16_t FreeTypeGX::drawText(int16_t x, int16_t y, wchar_t *text, GXColor color, uint16_t textStyle) {
uint16_t strLength = wcslen(text);
uint16_t x_pos = x, printed = 0;
uint16_t x_offset = 0, y_offset = 0;
GXTexObj glyphTexture;
FT_Vector pairDelta;
ftgxDataOffset offset;
if(textStyle & FTGX_JUSTIFY_MASK) {
x_offset = this->getStyleOffsetWidth(this->getWidth(text), textStyle);
}
if(textStyle & FTGX_ALIGN_MASK) {
y_offset = this->getStyleOffsetHeight(this->getOffset(text, &offset), textStyle);
}
for (uint16_t i = 0; i < strLength; i++) {
ftgxCharData* glyphData = NULL;
if( this->fontData.find(text[i]) != this->fontData.end() ) {
glyphData = &this->fontData[text[i]];
}
else {
glyphData = this->cacheGlyphData(text[i]);
}
if(glyphData != NULL) {
if(this->ftKerningEnabled && i) {
FT_Get_Kerning( this->ftFace, this->fontData[text[i - 1]].glyphIndex, glyphData->glyphIndex, FT_KERNING_DEFAULT, &pairDelta );
x_pos += pairDelta.x >> 6;
}
GX_InitTexObj(&glyphTexture, glyphData->glyphDataTexture, glyphData->textureWidth, glyphData->textureHeight, this->textureFormat, GX_CLAMP, GX_CLAMP, GX_FALSE);
this->copyTextureToFramebuffer(&glyphTexture, glyphData->textureWidth, glyphData->textureHeight, x_pos + glyphData->renderOffsetX + x_offset, y - glyphData->renderOffsetY + y_offset, color);
x_pos += glyphData->glyphAdvanceX;
printed++;
}
}
if(textStyle & FTGX_STYLE_MASK) {
this->drawTextFeature(x + x_offset, y + y_offset, this->getWidth(text), this->getOffset(text, &offset), textStyle, color);
}
return printed;
}
/**
* \overload
*/
uint16_t FreeTypeGX::drawText(int16_t x, int16_t y, wchar_t const *text, GXColor color, uint16_t textStyle) {
return this->drawText(x, y, (wchar_t *)text, color, textStyle);
}
void FreeTypeGX::drawTextFeature(int16_t x, int16_t y, uint16_t width, ftgxDataOffset *offsetData, uint16_t format, GXColor color) {
uint16_t featureHeight = this->ftPointSize >> 4 > 0 ? this->ftPointSize >> 4 : 1;
if (format & FTGX_STYLE_UNDERLINE ) {
switch(format & FTGX_ALIGN_MASK) {
/*
case FTGX_ALIGN_TOP:
this->copyFeatureToFramebuffer(width, featureHeight, x, y + offsetData->max + 1, color);
break;
case FTGX_ALIGN_MIDDLE:
this->copyFeatureToFramebuffer(width, featureHeight, x, y + ((offsetData->max - offsetData->min + 1) >> 1), color);
break;
case FTGX_ALIGN_BOTTOM:
this->copyFeatureToFramebuffer(width, featureHeight, x, y - offsetData->min, color);
break;
*/
default:
this->copyFeatureToFramebuffer(width, featureHeight, x, y + 1, color);
break;
}
}
if (format & FTGX_STYLE_STRIKE ) {
switch(format & FTGX_ALIGN_MASK) {
/*
case FTGX_ALIGN_TOP:
this->copyFeatureToFramebuffer(width, featureHeight, x, y + ((offsetData->max - offsetData->min + 1) >> 1), color);
break;
case FTGX_ALIGN_MIDDLE:
this->copyFeatureToFramebuffer(width, featureHeight, x, y, color);
break;
case FTGX_ALIGN_BOTTOM:
this->copyFeatureToFramebuffer(width, featureHeight, x, y - ((offsetData->max + offsetData->min) >> 1), color);
break;
*/
default:
// this->copyFeatureToFramebuffer(width, featureHeight, x, y - ((offsetData->max - offsetData->min) >> 1), color);
this->copyFeatureToFramebuffer(width, featureHeight, x, y - ((offsetData->max) >> 1), color);
break;
}
}
}
/**
* Processes the supplied string and return the width of the string in pixels.
*
* This routine processes each character of the supplied text string and calculates the width of the entire string.
* Note that if precaching of the entire font set is not enabled any uncached glyph will be cached after the call to this function.
*
* @param text NULL terminated string to calculate.
* @return The width of the text string in pixels.
*/
uint16_t FreeTypeGX::getWidth(wchar_t *text) {
uint16_t strLength = wcslen(text);
uint16_t strWidth = 0;
FT_Vector pairDelta;
for (uint16_t i = 0; i < strLength; i++) {
ftgxCharData* glyphData = NULL;
if( this->fontData.find(text[i]) != this->fontData.end() ) {
glyphData = &this->fontData[text[i]];
}
else {
glyphData = this->cacheGlyphData(text[i]);
}
if(glyphData != NULL) {
if(this->ftKerningEnabled && (i > 0)) {
FT_Get_Kerning( this->ftFace, this->fontData[text[i - 1]].glyphIndex, glyphData->glyphIndex, FT_KERNING_DEFAULT, &pairDelta );
strWidth += pairDelta.x >> 6;
}
strWidth += glyphData->glyphAdvanceX;
}
}
return strWidth;
}
/**
*
* \overload
*/
uint16_t FreeTypeGX::getWidth(wchar_t const *text) {
return this->getWidth((wchar_t *)text);
}
/**
* Processes the supplied string and return the height of the string in pixels.
*
* This routine processes each character of the supplied text string and calculates the height of the entire string.
* Note that if precaching of the entire font set is not enabled any uncached glyph will be cached after the call to this function.
*
* @param text NULL terminated string to calculate.
* @return The height of the text string in pixels.
*/
uint16_t FreeTypeGX::getHeight(wchar_t *text) {
ftgxDataOffset offset;
this->getOffset(text, &offset);
return offset.max - offset.min;
}
/**
*
* \overload
*/
uint16_t FreeTypeGX::getHeight(wchar_t const *text) {
return this->getHeight((wchar_t *)text);
}
/**
* Get the maximum offset above and minimum offset below the font origin line.
*
* This function calculates the maximum pixel height above the font origin line and the minimum
* pixel height below the font origin line and returns the values in an addressible structure.
*
* @param text NULL terminated string to calculate.
* @param offset returns the max and min values above and below the font origin line
*
*/
ftgxDataOffset* FreeTypeGX::getOffset(wchar_t *text, ftgxDataOffset* offset) {
uint16_t strLength = wcslen(text);
int16_t strMax = 0, strMin = 9999;
for (uint16_t i = 0; i < strLength; i++) {
ftgxCharData* glyphData = NULL;
if( this->fontData.find(text[i]) != this->fontData.end() ) {
glyphData = &this->fontData[text[i]];
}
else {
glyphData = this->cacheGlyphData(text[i]);
}
if(glyphData != NULL) {
strMax = glyphData->renderOffsetMax > strMax ? glyphData->renderOffsetMax : strMax;
strMin = glyphData->renderOffsetMin < strMin ? glyphData->renderOffsetMin : strMin;
}
}
offset->ascender = this->ftFace->size->metrics.ascender>>6;
offset->descender = this->ftFace->size->metrics.descender>>6;
offset->max = strMax;
offset->min = strMin;
return offset;
}
/**
*
* \overload
*/
ftgxDataOffset* FreeTypeGX::getOffset(wchar_t const *text, ftgxDataOffset* offset) {
return this->getOffset(text, offset);
}
/**
* Copies the supplied texture quad to the EFB.
*
* This routine uses the in-built GX quad builder functions to define the texture bounds and location on the EFB target.
*
* @param texObj A pointer to the glyph's initialized texture object.
* @param texWidth The pixel width of the texture object.
* @param texHeight The pixel height of the texture object.
* @param screenX The screen X coordinate at which to output the rendered texture.
* @param screenY The screen Y coordinate at which to output the rendered texture.
* @param color Color to apply to the texture.
*/
void FreeTypeGX::copyTextureToFramebuffer(GXTexObj *texObj, f32 texWidth, f32 texHeight, int16_t screenX, int16_t screenY, GXColor color) {
GX_LoadTexObj(texObj, GX_TEXMAP0);
GX_InvalidateTexAll();
GX_SetTevOp (GX_TEVSTAGE0, GX_MODULATE);
GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT);
GX_Begin(GX_QUADS, this->vertexIndex, 4);
GX_Position2s16(screenX, screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_TexCoord2f32(0.0f, 0.0f);
GX_Position2s16(texWidth + screenX, screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_TexCoord2f32(1.0f, 0.0f);
GX_Position2s16(texWidth + screenX, texHeight + screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_TexCoord2f32(1.0f, 1.0f);
GX_Position2s16(screenX, texHeight + screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_TexCoord2f32(0.0f, 1.0f);
GX_End();
this->setDefaultMode();
}
/**
* Creates a feature quad to the EFB.
*
* This function creates a simple quad for displaying underline or strikeout text styling.
*
* @param featureWidth The pixel width of the quad.
* @param featureHeight The pixel height of the quad.
* @param screenX The screen X coordinate at which to output the quad.
* @param screenY The screen Y coordinate at which to output the quad.
* @param color Color to apply to the texture.
*/
void FreeTypeGX::copyFeatureToFramebuffer(f32 featureWidth, f32 featureHeight, int16_t screenX, int16_t screenY, GXColor color) {
GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR);
GX_SetVtxDesc (GX_VA_TEX0, GX_NONE);
GX_Begin(GX_QUADS, this->vertexIndex, 4);
GX_Position2s16(screenX, screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_Position2s16(featureWidth + screenX, screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_Position2s16(featureWidth + screenX, featureHeight + screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_Position2s16(screenX, featureHeight + screenY);
GX_Color4u8(color.r, color.g, color.b, color.a);
GX_End();
this->setDefaultMode();
}

View File

@ -1,272 +0,0 @@
/*
* FreeTypeGX is a wrapper class for libFreeType which renders a compiled
* FreeType parsable font into a GX texture for Wii homebrew development.
* Copyright (C) 2008 Armin Tamzarian
* Modified by Tantric, 2009
*
* This file is part of FreeTypeGX.
*
* FreeTypeGX is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* FreeTypeGX 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with FreeTypeGX. If not, see <http://www.gnu.org/licenses/>.
*/
/** \mainpage FreeTypeGX
*
* \section sec_intro Introduction
*
* FreeTypeGX is a wrapper class for libFreeType which renders a compiled FreeType parsable font into a GX texture for Wii homebrew development.
* <br>
* FreeTypeGX is written in C++ and makes use of a selectable pre-buffered or buffer-on-demand methodology to allow fast and efficient printing of text to the EFB.
* <p>
* This library was developed in-full by Armin Tamzarian with the support of developers in \#wiibrew on EFnet.
*
* \section sec_installation_source Installation (Source Code)
*
* -# Ensure that you have the <a href = "http://www.tehskeen.com/forums/showthread.php?t=9404">libFreeType</a> Wii library installed in your development environment with the library added to your Makefile where appropriate.
* -# Ensure that you have the <a href = "http://code.google.com/p/metaphrasis">Metaphrasis</a> library installed in your development environment with the library added to your Makefile where appropriate.
* -# Extract the FreeTypeGX archive.
* -# Copy the contents of the <i>src</i> directory into your project's development path.
* -# Include the FreeTypeGX header file in your code using syntax such as the following:
* \code
* #include "FreeTypeGX.h"
* \endcode
*
* \section sec_installation_library Installation (Library)
*
* -# Ensure that you have the <a href = "http://www.tehskeen.com/forums/showthread.php?t=9404">libFreeType</a> Wii library installed in your development environment with the library added to your Makefile where appropriate.
* -# Ensure that you have the <a href = "http://code.google.com/p/metaphrasis">Metaphrasis</a> library installed in your development environment with the library added to your Makefile where appropriate.
* -# Extract the FreeTypeGX archive.
* -# Copy the contents of the <i>lib</i> directory into your <i>devKitPro/libogc</i> directory.
* -# Include the FreeTypeGX header file in your code using syntax such as the following:
* \code
* #include "FreeTypeGX.h"
* \endcode
*
* \section sec_freetypegx_prerequisites FreeTypeGX Prerequisites
*
* Before you begin using FreeTypeGX in your project you must ensure that the desired font in compiled into your project. For this example I will assume you are building your project with a Makefile using devKitPro evironment and are attempting to include a font whose filename is rursus_compact_mono.ttf.
*
* -# Copy the font into a directory which will be processed by the project's Makefile. If you are unsure about where you should place your font just copy the it into your project's source directory.
* \n\n
* -# Modify the Makefile to convert the font into an object file:
* \code
* %.ttf.o : %.ttf
* @echo $(notdir $<)
* $(bin2o)
* \endcode
* \n
* -# Include the font object's generated header file in your source code:
* \code
* #include "rursus_compact_mono_ttf.h"
* \endcode
* This header file defines the two variables that you will need for use within your project:
* \code
* extern const u8 rursus_compact_mono_ttf[]; A pointer to the font buffer within the compiled project.
* extern const u32 rursus_compact_mono_ttf_size; The size of the font's buffer in bytes.
* \endcode
*
* \section sec_freetypegx_usage FreeTypeGX Usage
*
* -# Within the file you included the FreeTypeGX.h header create an instance object of the FreeTypeGX class:
* \code
* FreeTypeGX *freeTypeGX = new FreeTypeGX();
* \endcode
* Alternately you can specify a texture format to which you would like to render the font characters. Note that the default value for this parameter is GX_TF_RGBA8.
* \code
* FreeTypeGX *freeTypeGX = new FreeTypeGX(GX_TF_RGB565);
* \endcode
* Furthermore, you can also specify a vertex format index to avoid conflicts with concurrent libraries or other systems. Note that the default value for this parameter is GX_VTXFMT1.
* \code
* FreeTypeGX *freeTypeGX = new FreeTypeGX(GX_TF_RGB565, GX_VTXFMT1);
* \endcode
* \n
* Currently supported textures are:
* \li <i>GX_TF_I4</i>
* \li <i>GX_TF_I8</i>
* \li <i>GX_TF_IA4</i>
* \li <i>GX_TF_IA8</i>
* \li <i>GX_TF_RGB565</i>
* \li <i>GX_TF_RGB5A3</i>
* \li <i>GX_TF_RGBA8</i>
*
* \n
* -# Using the allocated FreeTypeGX instance object call the loadFont function to load the font from the compiled buffer and specify the desired point size. Note that this function can be called multiple times to load a new:
* \code
* freeTypeGX->loadFont(rursus_compact_mono_ttf, rursus_compact_mono_ttf_size, 64);
* \endcode
* Alternately you can specify a flag which will load and cache all available font glyphs immidiately. Note that on large font sets enabling this feature could take a significant amount of time.
* \code
* freeTypeGX->loadFont(rursus_compact_mono_ttf, rursus_compact_mono_ttf_size, 64, true);
* \endcode
* \n
* -# If necessary you can enable compatibility modes with concurrent libraries or systems. For more information on this feature see the documentation for setCompatibilityMode:
* \code
* freeTypeGX->setCompatibilityMode(FTGX_COMPATIBILITY_GRRLIB);
* \endcode
* -# Using the allocated FreeTypeGX instance object call the drawText function to print a string at the specified screen X and Y coordinates to the current EFB:
* \code
* freeTypeGX->drawText(10, 25, _TEXT("FreeTypeGX Rocks!"));
* \endcode
* Alternately you can specify a <i>GXColor</i> object you would like to apply to the printed characters:
* \code
* freeTypeGX->drawText(10, 25, _TEXT("FreeTypeGX Rocks!"),
* (GXColor){0xff, 0xee, 0xaa, 0xff});
* \endcode
* Furthermore you can also specify a group of styling parameters which will modify the positioning or style of the text:
* \code
* freeTypeGX->drawText(10, 25, _TEXT("FreeTypeGX Rocks!"),
* (GXColor){0xff, 0xee, 0xaa, 0xff},
* FTGX_JUSTIFY_CENTER | FTGX_ALIGN_BOTTOM | FTGX_STYLE_UNDERLINE);
* \endcode
* \n
* Currently style parameters are:
* \li <i>FTGX_JUSTIFY_LEFT</i>
* \li <i>FTGX_JUSTIFY_CENTER</i>
* \li <i>FTGX_JUSTIFY_RIGHT</i>
* \li <i>FTGX_ALIGN_TOP</i>
* \li <i>FTGX_ALIGN_MIDDLE</i>
* \li <i>FTGX_ALIGN_BOTTOM</i>
* \li <i>FTGX_STYLE_UNDERLINE</i>
* \li <i>FTGX_STYLE_STRIKE</i>
*
* \section sec_license License
*
* FreeTypeGX is distributed under the GNU Lesser General Public License.
*
* \section sec_contact Contact
*
* If you have any suggestions, questions, or comments regarding this library feel free to e-mail me at tamzarian1989 [at] gmail [dawt] com.
*/
#ifndef FREETYPEGX_H_
#define FREETYPEGX_H_
#include <gccore.h>
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_BITMAP_H
#include <Metaphrasis.h>
#include <malloc.h>
#include <string.h>
#include <map>
/*! forward deklaration of private structures
*
*/
typedef struct ftgxCharData_ ftgxCharData;
typedef struct ftgxDataOffset_ ftgxDataOffset;
#define _TEXT(t) L ## t /**< Unicode helper macro. */
#define FTGX_NULL 0x0000
#define FTGX_JUSTIFY_LEFT 0x0001
#define FTGX_JUSTIFY_CENTER 0x0002
#define FTGX_JUSTIFY_RIGHT 0x0003
#define FTGX_JUSTIFY_MASK 0x000f
#define FTGX_ALIGN_TOP 0x0010
#define FTGX_ALIGN_MIDDLE 0x0020
#define FTGX_ALIGN_BOTTOM 0x0030
#define FTGX_ALIGN_BASELINE 0x0040
#define FTGX_ALIGN_GLYPH_TOP 0x0050
#define FTGX_ALIGN_GLYPH_MIDDLE 0x0060
#define FTGX_ALIGN_GLYPH_BOTTOM 0x0070
#define FTGX_ALIGN_MASK 0x00f0
#define FTGX_STYLE_UNDERLINE 0x0100
#define FTGX_STYLE_STRIKE 0x0200
#define FTGX_STYLE_MASK 0x0f00
#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_MODULATE 0X0001
#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_DECAL 0X0002
#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_BLEND 0X0004
#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_REPLACE 0X0008
#define FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR 0X0010
#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE 0X0100
#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_DIRECT 0X0200
#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX8 0X0400
#define FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_INDEX16 0X0800
#define FTGX_COMPATIBILITY_NONE 0x0000
#define FTGX_COMPATIBILITY_GRRLIB FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_PASSCLR | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_NONE
#define FTGX_COMPATIBILITY_LIBWIISPRITE FTGX_COMPATIBILITY_DEFAULT_TEVOP_GX_MODULATE | FTGX_COMPATIBILITY_DEFAULT_VTXDESC_GX_DIRECT
const GXColor ftgxWhite = (GXColor){0xff, 0xff, 0xff, 0xff}; /**< Constant color value used only to sanitize Doxygen documentation. */
/*! \class FreeTypeGX
* \brief Wrapper class for the libFreeType library with GX rendering.
* \author Armin Tamzarian
* \version 0.2.4
*
* FreeTypeGX acts as a wrapper class for the libFreeType library. It supports precaching of transformed glyph data into
* a specified texture format. Rendering of the data to the EFB is accomplished through the application of high performance
* GX texture functions resulting in high throughput of string rendering.
*/
class FreeTypeGX {
private:
FT_Library ftLibrary; /**< FreeType FT_Library instance. */
FT_Face ftFace; /**< FreeType reusable FT_Face typographic object. */
FT_GlyphSlot ftSlot; /**< FreeType reusable FT_GlyphSlot glyph container object. */
FT_UInt ftPointSize; /**< Requested size of the rendered font. */
bool ftKerningEnabled; /**< Flag indicating the availability of font kerning data. */
uint8_t textureFormat; /**< Defined texture format of the target EFB. */
uint8_t vertexIndex; /**< Vertex format descriptor index. */
uint32_t compatibilityMode; /**< Compatibility mode for default tev operations and vertex descriptors. */
std::map<wchar_t, ftgxCharData> fontData; /**< Map which holds the glyph data structures for the corresponding characters. */
static uint16_t adjustTextureWidth(uint16_t textureWidth, uint8_t textureFormat);
static uint16_t adjustTextureHeight(uint16_t textureHeight, uint8_t textureFormat);
static int16_t getStyleOffsetWidth(uint16_t width, uint16_t format);
static int16_t getStyleOffsetHeight(ftgxDataOffset *offset, uint16_t format);
void unloadFont();
ftgxCharData *cacheGlyphData(wchar_t charCode);
uint16_t cacheGlyphDataComplete();
void loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData);
void setDefaultMode();
void drawTextFeature(int16_t x, int16_t y, uint16_t width, ftgxDataOffset *offsetData, uint16_t format, GXColor color);
void copyTextureToFramebuffer(GXTexObj *texObj, f32 texWidth, f32 texHeight, int16_t screenX, int16_t screenY, GXColor color);
void copyFeatureToFramebuffer(f32 featureWidth, f32 featureHeight, int16_t screenX, int16_t screenY, GXColor color);
public:
FreeTypeGX(uint8_t textureFormat = GX_TF_RGBA8, uint8_t vertexIndex = GX_VTXFMT1);
~FreeTypeGX();
static wchar_t* charToWideChar(char* p);
static wchar_t* charToWideChar(const char* p);
void setVertexFormat(uint8_t vertexIndex);
void setCompatibilityMode(uint32_t compatibilityMode);
uint16_t loadFont(uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll = false);
uint16_t loadFont(const uint8_t* fontBuffer, FT_Long bufferSize, FT_UInt pointSize, bool cacheAll = false);
void changeSize(FT_UInt vPointSize, FT_UInt hPointSize=0);
uint16_t drawText(int16_t x, int16_t y, wchar_t *text, GXColor color = ftgxWhite, uint16_t textStyling = FTGX_NULL);
uint16_t drawText(int16_t x, int16_t y, wchar_t const *text, GXColor color = ftgxWhite, uint16_t textStyling = FTGX_NULL);
uint16_t getWidth(wchar_t *text);
uint16_t getWidth(wchar_t const *text);
uint16_t getHeight(wchar_t *text);
uint16_t getHeight(wchar_t const *text);
ftgxDataOffset* getOffset(wchar_t *text, ftgxDataOffset* offset);
ftgxDataOffset* getOffset(wchar_t const *text, ftgxDataOffset* offset);
};
#endif /* FREETYPEGX_H_ */

View File

@ -1,997 +0,0 @@
//GB2Unicode.c
#include "GB2Unicode.h"
unsigned short bGbUnicodedat1[]={
0x3000,0x3001,0x3002,0x00B7,0x02C9,0x02C7,0x00A8,0x3003,
0x3005,0x2014,0xFF5E,0x2016,0x2026,0x2018,0x2019,0x201C,
0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B,0x300C,
0x300D,0x300E,0x300F,0x3016,0x3017,0x3010,0x3011,0x00B1,
0x00D7,0x00F7,0x2236,0x2227,0x2228,0x2211,0x220F,0x222A,
0x2229,0x2208,0x2237,0x221A,0x22A5,0x2225,0x2220,0x2312,
0x2299,0x222B,0x222E,0x2261,0x224C,0x2248,0x223D,0x221D,
0x2260,0x226E,0x226F,0x2264,0x2265,0x221E,0x2235,0x2234,
0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFF04,0x00A4,
0xFFE0,0xFFE1,0x2030,0x00A7,0x2116,0x2606,0x2605,0x25CB,
0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3,0x25B2,
0x203B,0x2192,0x2190,0x2191,0x2193,0x3013,0x2170,0x2171,
0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2488,0x2489,
0x248A,0x248B,0x248C,0x248D,0x248E,0x248F,0x2490,0x2491,
0x2492,0x2493,0x2494,0x2495,0x2496,0x2497,0x2498,0x2499,
0x249A,0x249B,0x2474,0x2475,0x2476,0x2477,0x2478,0x2479,
0x247A,0x247B,0x247C,0x247D,0x247E,0x247F,0x2480,0x2481,
0x2482,0x2483,0x2484,0x2485,0x2486,0x2487,0x2460,0x2461,
0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,0x2469,
0x2000,0x2000,0x3220,0x3221,0x3222,0x3223,0x3224,0x3225,
0x3226,0x3227,0x3228,0x3229,0x2000,0x2000,0x2160,0x2161,
0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,
0x216A,0x216B,0x2000,0x2000,0xFF01,0xFF02,0xFF03,0xFFE5,
0xFF05,0xFF06,0xFF07,0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C,
0xFF0D,0xFF0E,0xFF0F,0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,
0xFF15,0xFF16,0xFF17,0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C,
0xFF1D,0xFF1E,0xFF1F,0xFF20,0xFF21,0xFF22,0xFF23,0xFF24,
0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,
0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,
0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A,0xFF3B,0xFF3C,
0xFF3D,0xFF3E,0xFF3F,0xFF40,0xFF41,0xFF42,0xFF43,0xFF44,
0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,
0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,
0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A,0xFF5B,0xFF5C,
0xFF5D,0xFFE3,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,
0x3047,0x3048,0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,
0x304F,0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,
0x3057,0x3058,0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,
0x305F,0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,
0x3067,0x3068,0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,
0x306F,0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,
0x3077,0x3078,0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,
0x307F,0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,
0x3087,0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,
0x308F,0x3090,0x3091,0x3092,0x3093,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8,
0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0,
0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8,
0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0,
0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8,
0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0,
0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8,
0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0,
0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8,
0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0,
0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x0391,0x0392,
0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039A,
0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,0x03A1,0x03A3,
0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x03B1,0x03B2,
0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,
0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0,0x03C1,0x03C3,
0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0xFE35,0xFE36,0xFE39,
0xFE3A,0xFE3F,0xFE40,0xFE3D,0xFE3E,0xFE41,0xFE42,0xFE43,
0xFE44,0x2000,0x2000,0xFE3B,0xFE3C,0xFE37,0xFE38,0xFE31,
0x2000,0xFE33,0xFE34,0x2000,0x2000,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x0410,0x0411,0x0412,0x0413,
0x0414,0x0415,0x0401,0x0416,0x0417,0x0418,0x0419,0x041A,
0x041B,0x041C,0x041D,0x041E,0x041F,0x0420,0x0421,0x0422,
0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042A,
0x042B,0x042C,0x042D,0x042E,0x042F,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x0430,0x0431,0x0432,0x0433,
0x0434,0x0435,0x0451,0x0436,0x0437,0x0438,0x0439,0x043A,
0x043B,0x043C,0x043D,0x043E,0x043F,0x0440,0x0441,0x0442,
0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,
0x044B,0x044C,0x044D,0x044E,0x044F,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x2000,0x2000,0x0101,0x00E1,0x01CE,0x00E0,0x0113,0x00E9,
0x011B,0x00E8,0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3,
0x01D2,0x00F2,0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8,
0x01DA,0x01DC,0x00FC,0x00EA,0x0251,0xE7C7,0x0144,0x0148,
0xE7C8,0x0261,0x2000,0x2000,0x2000,0x2000,0x3105,0x3106,
0x3107,0x3108,0x3109,0x310A,0x310B,0x310C,0x310D,0x310E,
0x310F,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,
0x3117,0x3118,0x3119,0x311A,0x311B,0x311C,0x311D,0x311E,
0x311F,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,
0x3127,0x3128,0x3129,0x2000,0x2000,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2500,0x2501,0x2502,0x2503,0x2504,
0x2505,0x2506,0x2507,0x2508,0x2509,0x250A,0x250B,0x250C,
0x250D,0x250E,0x250F,0x2510,0x2511,0x2512,0x2513,0x2514,
0x2515,0x2516,0x2517,0x2518,0x2519,0x251A,0x251B,0x251C,
0x251D,0x251E,0x251F,0x2520,0x2521,0x2522,0x2523,0x2524,
0x2525,0x2526,0x2527,0x2528,0x2529,0x252A,0x252B,0x252C,
0x252D,0x252E,0x252F,0x2530,0x2531,0x2532,0x2533,0x2534,
0x2535,0x2536,0x2537,0x2538,0x2539,0x253A,0x253B,0x253C,
0x253D,0x253E,0x253F,0x2540,0x2541,0x2542,0x2543,0x2544,
0x2545,0x2546,0x2547,0x2548,0x2549,0x254A,0x254B,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,0x2000,
0x2000,0x2000,0x2000,0x2000,0x2000,0x2000
};
unsigned short bGbUnicodedat2[]={
0x554A,0x963F,0x57C3,0x6328,0x54CE,0x5509,0x54C0,0x7691,
0x764C,0x853C,0x77EE,0x827E,0x788D,0x7231,0x9698,0x978D,
0x6C28,0x5B89,0x4FFA,0x6309,0x6697,0x5CB8,0x80FA,0x6848,
0x80AE,0x6602,0x76CE,0x51F9,0x6556,0x71AC,0x7FF1,0x8884,
0x50B2,0x5965,0x61CA,0x6FB3,0x82AD,0x634C,0x6252,0x53ED,
0x5427,0x7B06,0x516B,0x75A4,0x5DF4,0x62D4,0x8DCB,0x9776,
0x628A,0x8019,0x575D,0x9738,0x7F62,0x7238,0x767D,0x67CF,
0x767E,0x6446,0x4F70,0x8D25,0x62DC,0x7A17,0x6591,0x73ED,
0x642C,0x6273,0x822C,0x9881,0x677F,0x7248,0x626E,0x62CC,
0x4F34,0x74E3,0x534A,0x529E,0x7ECA,0x90A6,0x5E2E,0x6886,
0x699C,0x8180,0x7ED1,0x68D2,0x78C5,0x868C,0x9551,0x508D,
0x8C24,0x82DE,0x80DE,0x5305,0x8912,0x5265,0x8584,0x96F9,
0x4FDD,0x5821,0x9971,0x5B9D,0x62B1,0x62A5,0x66B4,0x8C79,
0x9C8D,0x7206,0x676F,0x7891,0x60B2,0x5351,0x5317,0x8F88,
0x80CC,0x8D1D,0x94A1,0x500D,0x72C8,0x5907,0x60EB,0x7119,
0x88AB,0x5954,0x82EF,0x672C,0x7B28,0x5D29,0x7EF7,0x752D,
0x6CF5,0x8E66,0x8FF8,0x903C,0x9F3B,0x6BD4,0x9119,0x7B14,
0x5F7C,0x78A7,0x84D6,0x853D,0x6BD5,0x6BD9,0x6BD6,0x5E01,
0x5E87,0x75F9,0x95ED,0x655D,0x5F0A,0x5FC5,0x8F9F,0x58C1,
0x81C2,0x907F,0x965B,0x97AD,0x8FB9,0x7F16,0x8D2C,0x6241,
0x4FBF,0x53D8,0x535E,0x8FA8,0x8FA9,0x8FAB,0x904D,0x6807,
0x5F6A,0x8198,0x8868,0x9CD6,0x618B,0x522B,0x762A,0x5F6C,
0x658C,0x6FD2,0x6EE8,0x5BBE,0x6448,0x5175,0x51B0,0x67C4,
0x4E19,0x79C9,0x997C,0x70B3,0x75C5,0x5E76,0x73BB,0x83E0,
0x64AD,0x62E8,0x94B5,0x6CE2,0x535A,0x52C3,0x640F,0x94C2,
0x7B94,0x4F2F,0x5E1B,0x8236,0x8116,0x818A,0x6E24,0x6CCA,
0x9A73,0x6355,0x535C,0x54FA,0x8865,0x57E0,0x4E0D,0x5E03,
0x6B65,0x7C3F,0x90E8,0x6016,0x64E6,0x731C,0x88C1,0x6750,
0x624D,0x8D22,0x776C,0x8E29,0x91C7,0x5F69,0x83DC,0x8521,
0x9910,0x53C2,0x8695,0x6B8B,0x60ED,0x60E8,0x707F,0x82CD,
0x8231,0x4ED3,0x6CA7,0x85CF,0x64CD,0x7CD9,0x69FD,0x66F9,
0x8349,0x5395,0x7B56,0x4FA7,0x518C,0x6D4B,0x5C42,0x8E6D,
0x63D2,0x53C9,0x832C,0x8336,0x67E5,0x78B4,0x643D,0x5BDF,
0x5C94,0x5DEE,0x8BE7,0x62C6,0x67F4,0x8C7A,0x6400,0x63BA,
0x8749,0x998B,0x8C17,0x7F20,0x94F2,0x4EA7,0x9610,0x98A4,
0x660C,0x7316,0x573A,0x5C1D,0x5E38,0x957F,0x507F,0x80A0,
0x5382,0x655E,0x7545,0x5531,0x5021,0x8D85,0x6284,0x949E,
0x671D,0x5632,0x6F6E,0x5DE2,0x5435,0x7092,0x8F66,0x626F,
0x64A4,0x63A3,0x5F7B,0x6F88,0x90F4,0x81E3,0x8FB0,0x5C18,
0x6668,0x5FF1,0x6C89,0x9648,0x8D81,0x886C,0x6491,0x79F0,
0x57CE,0x6A59,0x6210,0x5448,0x4E58,0x7A0B,0x60E9,0x6F84,
0x8BDA,0x627F,0x901E,0x9A8B,0x79E4,0x5403,0x75F4,0x6301,
0x5319,0x6C60,0x8FDF,0x5F1B,0x9A70,0x803B,0x9F7F,0x4F88,
0x5C3A,0x8D64,0x7FC5,0x65A5,0x70BD,0x5145,0x51B2,0x866B,
0x5D07,0x5BA0,0x62BD,0x916C,0x7574,0x8E0C,0x7A20,0x6101,
0x7B79,0x4EC7,0x7EF8,0x7785,0x4E11,0x81ED,0x521D,0x51FA,
0x6A71,0x53A8,0x8E87,0x9504,0x96CF,0x6EC1,0x9664,0x695A,
0x7840,0x50A8,0x77D7,0x6410,0x89E6,0x5904,0x63E3,0x5DDD,
0x7A7F,0x693D,0x4F20,0x8239,0x5598,0x4E32,0x75AE,0x7A97,
0x5E62,0x5E8A,0x95EF,0x521B,0x5439,0x708A,0x6376,0x9524,
0x5782,0x6625,0x693F,0x9187,0x5507,0x6DF3,0x7EAF,0x8822,
0x6233,0x7EF0,0x75B5,0x8328,0x78C1,0x96CC,0x8F9E,0x6148,
0x74F7,0x8BCD,0x6B64,0x523A,0x8D50,0x6B21,0x806A,0x8471,
0x56F1,0x5306,0x4ECE,0x4E1B,0x51D1,0x7C97,0x918B,0x7C07,
0x4FC3,0x8E7F,0x7BE1,0x7A9C,0x6467,0x5D14,0x50AC,0x8106,
0x7601,0x7CB9,0x6DEC,0x7FE0,0x6751,0x5B58,0x5BF8,0x78CB,
0x64AE,0x6413,0x63AA,0x632B,0x9519,0x642D,0x8FBE,0x7B54,
0x7629,0x6253,0x5927,0x5446,0x6B79,0x50A3,0x6234,0x5E26,
0x6B86,0x4EE3,0x8D37,0x888B,0x5F85,0x902E,0x6020,0x803D,
0x62C5,0x4E39,0x5355,0x90F8,0x63B8,0x80C6,0x65E6,0x6C2E,
0x4F46,0x60EE,0x6DE1,0x8BDE,0x5F39,0x86CB,0x5F53,0x6321,
0x515A,0x8361,0x6863,0x5200,0x6363,0x8E48,0x5012,0x5C9B,
0x7977,0x5BFC,0x5230,0x7A3B,0x60BC,0x9053,0x76D7,0x5FB7,
0x5F97,0x7684,0x8E6C,0x706F,0x767B,0x7B49,0x77AA,0x51F3,
0x9093,0x5824,0x4F4E,0x6EF4,0x8FEA,0x654C,0x7B1B,0x72C4,
0x6DA4,0x7FDF,0x5AE1,0x62B5,0x5E95,0x5730,0x8482,0x7B2C,
0x5E1D,0x5F1F,0x9012,0x7F14,0x98A0,0x6382,0x6EC7,0x7898,
0x70B9,0x5178,0x975B,0x57AB,0x7535,0x4F43,0x7538,0x5E97,
0x60E6,0x5960,0x6DC0,0x6BBF,0x7889,0x53FC,0x96D5,0x51CB,
0x5201,0x6389,0x540A,0x9493,0x8C03,0x8DCC,0x7239,0x789F,
0x8776,0x8FED,0x8C0D,0x53E0,0x4E01,0x76EF,0x53EE,0x9489,
0x9876,0x9F0E,0x952D,0x5B9A,0x8BA2,0x4E22,0x4E1C,0x51AC,
0x8463,0x61C2,0x52A8,0x680B,0x4F97,0x606B,0x51BB,0x6D1E,
0x515C,0x6296,0x6597,0x9661,0x8C46,0x9017,0x75D8,0x90FD,
0x7763,0x6BD2,0x728A,0x72EC,0x8BFB,0x5835,0x7779,0x8D4C,
0x675C,0x9540,0x809A,0x5EA6,0x6E21,0x5992,0x7AEF,0x77ED,
0x953B,0x6BB5,0x65AD,0x7F0E,0x5806,0x5151,0x961F,0x5BF9,
0x58A9,0x5428,0x8E72,0x6566,0x987F,0x56E4,0x949D,0x76FE,
0x9041,0x6387,0x54C6,0x591A,0x593A,0x579B,0x8EB2,0x6735,
0x8DFA,0x8235,0x5241,0x60F0,0x5815,0x86FE,0x5CE8,0x9E45,
0x4FC4,0x989D,0x8BB9,0x5A25,0x6076,0x5384,0x627C,0x904F,
0x9102,0x997F,0x6069,0x800C,0x513F,0x8033,0x5C14,0x9975,
0x6D31,0x4E8C,0x8D30,0x53D1,0x7F5A,0x7B4F,0x4F10,0x4E4F,
0x9600,0x6CD5,0x73D0,0x85E9,0x5E06,0x756A,0x7FFB,0x6A0A,
0x77FE,0x9492,0x7E41,0x51E1,0x70E6,0x53CD,0x8FD4,0x8303,
0x8D29,0x72AF,0x996D,0x6CDB,0x574A,0x82B3,0x65B9,0x80AA,
0x623F,0x9632,0x59A8,0x4EFF,0x8BBF,0x7EBA,0x653E,0x83F2,
0x975E,0x5561,0x98DE,0x80A5,0x532A,0x8BFD,0x5420,0x80BA,
0x5E9F,0x6CB8,0x8D39,0x82AC,0x915A,0x5429,0x6C1B,0x5206,
0x7EB7,0x575F,0x711A,0x6C7E,0x7C89,0x594B,0x4EFD,0x5FFF,
0x6124,0x7CAA,0x4E30,0x5C01,0x67AB,0x8702,0x5CF0,0x950B,
0x98CE,0x75AF,0x70FD,0x9022,0x51AF,0x7F1D,0x8BBD,0x5949,
0x51E4,0x4F5B,0x5426,0x592B,0x6577,0x80A4,0x5B75,0x6276,
0x62C2,0x8F90,0x5E45,0x6C1F,0x7B26,0x4F0F,0x4FD8,0x670D,
0x6D6E,0x6DAA,0x798F,0x88B1,0x5F17,0x752B,0x629A,0x8F85,
0x4FEF,0x91DC,0x65A7,0x812F,0x8151,0x5E9C,0x8150,0x8D74,
0x526F,0x8986,0x8D4B,0x590D,0x5085,0x4ED8,0x961C,0x7236,
0x8179,0x8D1F,0x5BCC,0x8BA3,0x9644,0x5987,0x7F1A,0x5490,
0x5676,0x560E,0x8BE5,0x6539,0x6982,0x9499,0x76D6,0x6E89,
0x5E72,0x7518,0x6746,0x67D1,0x7AFF,0x809D,0x8D76,0x611F,
0x79C6,0x6562,0x8D63,0x5188,0x521A,0x94A2,0x7F38,0x809B,
0x7EB2,0x5C97,0x6E2F,0x6760,0x7BD9,0x768B,0x9AD8,0x818F,
0x7F94,0x7CD5,0x641E,0x9550,0x7A3F,0x544A,0x54E5,0x6B4C,
0x6401,0x6208,0x9E3D,0x80F3,0x7599,0x5272,0x9769,0x845B,
0x683C,0x86E4,0x9601,0x9694,0x94EC,0x4E2A,0x5404,0x7ED9,
0x6839,0x8DDF,0x8015,0x66F4,0x5E9A,0x7FB9,0x57C2,0x803F,
0x6897,0x5DE5,0x653B,0x529F,0x606D,0x9F9A,0x4F9B,0x8EAC,
0x516C,0x5BAB,0x5F13,0x5DE9,0x6C5E,0x62F1,0x8D21,0x5171,
0x94A9,0x52FE,0x6C9F,0x82DF,0x72D7,0x57A2,0x6784,0x8D2D,
0x591F,0x8F9C,0x83C7,0x5495,0x7B8D,0x4F30,0x6CBD,0x5B64,
0x59D1,0x9F13,0x53E4,0x86CA,0x9AA8,0x8C37,0x80A1,0x6545,
0x987E,0x56FA,0x96C7,0x522E,0x74DC,0x5250,0x5BE1,0x6302,
0x8902,0x4E56,0x62D0,0x602A,0x68FA,0x5173,0x5B98,0x51A0,
0x89C2,0x7BA1,0x9986,0x7F50,0x60EF,0x704C,0x8D2F,0x5149,
0x5E7F,0x901B,0x7470,0x89C4,0x572D,0x7845,0x5F52,0x9F9F,
0x95FA,0x8F68,0x9B3C,0x8BE1,0x7678,0x6842,0x67DC,0x8DEA,
0x8D35,0x523D,0x8F8A,0x6EDA,0x68CD,0x9505,0x90ED,0x56FD,
0x679C,0x88F9,0x8FC7,0x54C8,0x9AB8,0x5B69,0x6D77,0x6C26,
0x4EA5,0x5BB3,0x9A87,0x9163,0x61A8,0x90AF,0x97E9,0x542B,
0x6DB5,0x5BD2,0x51FD,0x558A,0x7F55,0x7FF0,0x64BC,0x634D,
0x65F1,0x61BE,0x608D,0x710A,0x6C57,0x6C49,0x592F,0x676D,
0x822A,0x58D5,0x568E,0x8C6A,0x6BEB,0x90DD,0x597D,0x8017,
0x53F7,0x6D69,0x5475,0x559D,0x8377,0x83CF,0x6838,0x79BE,
0x548C,0x4F55,0x5408,0x76D2,0x8C89,0x9602,0x6CB3,0x6DB8,
0x8D6B,0x8910,0x9E64,0x8D3A,0x563F,0x9ED1,0x75D5,0x5F88,
0x72E0,0x6068,0x54FC,0x4EA8,0x6A2A,0x8861,0x6052,0x8F70,
0x54C4,0x70D8,0x8679,0x9E3F,0x6D2A,0x5B8F,0x5F18,0x7EA2,
0x5589,0x4FAF,0x7334,0x543C,0x539A,0x5019,0x540E,0x547C,
0x4E4E,0x5FFD,0x745A,0x58F6,0x846B,0x80E1,0x8774,0x72D0,
0x7CCA,0x6E56,0x5F27,0x864E,0x552C,0x62A4,0x4E92,0x6CAA,
0x6237,0x82B1,0x54D7,0x534E,0x733E,0x6ED1,0x753B,0x5212,
0x5316,0x8BDD,0x69D0,0x5F8A,0x6000,0x6DEE,0x574F,0x6B22,
0x73AF,0x6853,0x8FD8,0x7F13,0x6362,0x60A3,0x5524,0x75EA,
0x8C62,0x7115,0x6DA3,0x5BA6,0x5E7B,0x8352,0x614C,0x9EC4,
0x78FA,0x8757,0x7C27,0x7687,0x51F0,0x60F6,0x714C,0x6643,
0x5E4C,0x604D,0x8C0E,0x7070,0x6325,0x8F89,0x5FBD,0x6062,
0x86D4,0x56DE,0x6BC1,0x6094,0x6167,0x5349,0x60E0,0x6666,
0x8D3F,0x79FD,0x4F1A,0x70E9,0x6C47,0x8BB3,0x8BF2,0x7ED8,
0x8364,0x660F,0x5A5A,0x9B42,0x6D51,0x6DF7,0x8C41,0x6D3B,
0x4F19,0x706B,0x83B7,0x6216,0x60D1,0x970D,0x8D27,0x7978,
0x51FB,0x573E,0x57FA,0x673A,0x7578,0x7A3D,0x79EF,0x7B95,
0x808C,0x9965,0x8FF9,0x6FC0,0x8BA5,0x9E21,0x59EC,0x7EE9,
0x7F09,0x5409,0x6781,0x68D8,0x8F91,0x7C4D,0x96C6,0x53CA,
0x6025,0x75BE,0x6C72,0x5373,0x5AC9,0x7EA7,0x6324,0x51E0,
0x810A,0x5DF1,0x84DF,0x6280,0x5180,0x5B63,0x4F0E,0x796D,
0x5242,0x60B8,0x6D4E,0x5BC4,0x5BC2,0x8BA1,0x8BB0,0x65E2,
0x5FCC,0x9645,0x5993,0x7EE7,0x7EAA,0x5609,0x67B7,0x5939,
0x4F73,0x5BB6,0x52A0,0x835A,0x988A,0x8D3E,0x7532,0x94BE,
0x5047,0x7A3C,0x4EF7,0x67B6,0x9A7E,0x5AC1,0x6B7C,0x76D1,
0x575A,0x5C16,0x7B3A,0x95F4,0x714E,0x517C,0x80A9,0x8270,
0x5978,0x7F04,0x8327,0x68C0,0x67EC,0x78B1,0x7877,0x62E3,
0x6361,0x7B80,0x4FED,0x526A,0x51CF,0x8350,0x69DB,0x9274,
0x8DF5,0x8D31,0x89C1,0x952E,0x7BAD,0x4EF6,0x5065,0x8230,
0x5251,0x996F,0x6E10,0x6E85,0x6DA7,0x5EFA,0x50F5,0x59DC,
0x5C06,0x6D46,0x6C5F,0x7586,0x848B,0x6868,0x5956,0x8BB2,
0x5320,0x9171,0x964D,0x8549,0x6912,0x7901,0x7126,0x80F6,
0x4EA4,0x90CA,0x6D47,0x9A84,0x5A07,0x56BC,0x6405,0x94F0,
0x77EB,0x4FA5,0x811A,0x72E1,0x89D2,0x997A,0x7F34,0x7EDE,
0x527F,0x6559,0x9175,0x8F7F,0x8F83,0x53EB,0x7A96,0x63ED,
0x63A5,0x7686,0x79F8,0x8857,0x9636,0x622A,0x52AB,0x8282,
0x6854,0x6770,0x6377,0x776B,0x7AED,0x6D01,0x7ED3,0x89E3,
0x59D0,0x6212,0x85C9,0x82A5,0x754C,0x501F,0x4ECB,0x75A5,
0x8BEB,0x5C4A,0x5DFE,0x7B4B,0x65A4,0x91D1,0x4ECA,0x6D25,
0x895F,0x7D27,0x9526,0x4EC5,0x8C28,0x8FDB,0x9773,0x664B,
0x7981,0x8FD1,0x70EC,0x6D78,0x5C3D,0x52B2,0x8346,0x5162,
0x830E,0x775B,0x6676,0x9CB8,0x4EAC,0x60CA,0x7CBE,0x7CB3,
0x7ECF,0x4E95,0x8B66,0x666F,0x9888,0x9759,0x5883,0x656C,
0x955C,0x5F84,0x75C9,0x9756,0x7ADF,0x7ADE,0x51C0,0x70AF,
0x7A98,0x63EA,0x7A76,0x7EA0,0x7396,0x97ED,0x4E45,0x7078,
0x4E5D,0x9152,0x53A9,0x6551,0x65E7,0x81FC,0x8205,0x548E,
0x5C31,0x759A,0x97A0,0x62D8,0x72D9,0x75BD,0x5C45,0x9A79,
0x83CA,0x5C40,0x5480,0x77E9,0x4E3E,0x6CAE,0x805A,0x62D2,
0x636E,0x5DE8,0x5177,0x8DDD,0x8E1E,0x952F,0x4FF1,0x53E5,
0x60E7,0x70AC,0x5267,0x6350,0x9E43,0x5A1F,0x5026,0x7737,
0x5377,0x7EE2,0x6485,0x652B,0x6289,0x6398,0x5014,0x7235,
0x89C9,0x51B3,0x8BC0,0x7EDD,0x5747,0x83CC,0x94A7,0x519B,
0x541B,0x5CFB,0x4FCA,0x7AE3,0x6D5A,0x90E1,0x9A8F,0x5580,
0x5496,0x5361,0x54AF,0x5F00,0x63E9,0x6977,0x51EF,0x6168,
0x520A,0x582A,0x52D8,0x574E,0x780D,0x770B,0x5EB7,0x6177,
0x7CE0,0x625B,0x6297,0x4EA2,0x7095,0x8003,0x62F7,0x70E4,
0x9760,0x5777,0x82DB,0x67EF,0x68F5,0x78D5,0x9897,0x79D1,
0x58F3,0x54B3,0x53EF,0x6E34,0x514B,0x523B,0x5BA2,0x8BFE,
0x80AF,0x5543,0x57A6,0x6073,0x5751,0x542D,0x7A7A,0x6050,
0x5B54,0x63A7,0x62A0,0x53E3,0x6263,0x5BC7,0x67AF,0x54ED,
0x7A9F,0x82E6,0x9177,0x5E93,0x88E4,0x5938,0x57AE,0x630E,
0x8DE8,0x80EF,0x5757,0x7B77,0x4FA9,0x5FEB,0x5BBD,0x6B3E,
0x5321,0x7B50,0x72C2,0x6846,0x77FF,0x7736,0x65F7,0x51B5,
0x4E8F,0x76D4,0x5CBF,0x7AA5,0x8475,0x594E,0x9B41,0x5080,
0x9988,0x6127,0x6E83,0x5764,0x6606,0x6346,0x56F0,0x62EC,
0x6269,0x5ED3,0x9614,0x5783,0x62C9,0x5587,0x8721,0x814A,
0x8FA3,0x5566,0x83B1,0x6765,0x8D56,0x84DD,0x5A6A,0x680F,
0x62E6,0x7BEE,0x9611,0x5170,0x6F9C,0x8C30,0x63FD,0x89C8,
0x61D2,0x7F06,0x70C2,0x6EE5,0x7405,0x6994,0x72FC,0x5ECA,
0x90CE,0x6717,0x6D6A,0x635E,0x52B3,0x7262,0x8001,0x4F6C,
0x59E5,0x916A,0x70D9,0x6D9D,0x52D2,0x4E50,0x96F7,0x956D,
0x857E,0x78CA,0x7D2F,0x5121,0x5792,0x64C2,0x808B,0x7C7B,
0x6CEA,0x68F1,0x695E,0x51B7,0x5398,0x68A8,0x7281,0x9ECE,
0x7BF1,0x72F8,0x79BB,0x6F13,0x7406,0x674E,0x91CC,0x9CA4,
0x793C,0x8389,0x8354,0x540F,0x6817,0x4E3D,0x5389,0x52B1,
0x783E,0x5386,0x5229,0x5088,0x4F8B,0x4FD0,0x75E2,0x7ACB,
0x7C92,0x6CA5,0x96B6,0x529B,0x7483,0x54E9,0x4FE9,0x8054,
0x83B2,0x8FDE,0x9570,0x5EC9,0x601C,0x6D9F,0x5E18,0x655B,
0x8138,0x94FE,0x604B,0x70BC,0x7EC3,0x7CAE,0x51C9,0x6881,
0x7CB1,0x826F,0x4E24,0x8F86,0x91CF,0x667E,0x4EAE,0x8C05,
0x64A9,0x804A,0x50DA,0x7597,0x71CE,0x5BE5,0x8FBD,0x6F66,
0x4E86,0x6482,0x9563,0x5ED6,0x6599,0x5217,0x88C2,0x70C8,
0x52A3,0x730E,0x7433,0x6797,0x78F7,0x9716,0x4E34,0x90BB,
0x9CDE,0x6DCB,0x51DB,0x8D41,0x541D,0x62CE,0x73B2,0x83F1,
0x96F6,0x9F84,0x94C3,0x4F36,0x7F9A,0x51CC,0x7075,0x9675,
0x5CAD,0x9886,0x53E6,0x4EE4,0x6E9C,0x7409,0x69B4,0x786B,
0x998F,0x7559,0x5218,0x7624,0x6D41,0x67F3,0x516D,0x9F99,
0x804B,0x5499,0x7B3C,0x7ABF,0x9686,0x5784,0x62E2,0x9647,
0x697C,0x5A04,0x6402,0x7BD3,0x6F0F,0x964B,0x82A6,0x5362,
0x9885,0x5E90,0x7089,0x63B3,0x5364,0x864F,0x9C81,0x9E93,
0x788C,0x9732,0x8DEF,0x8D42,0x9E7F,0x6F5E,0x7984,0x5F55,
0x9646,0x622E,0x9A74,0x5415,0x94DD,0x4FA3,0x65C5,0x5C65,
0x5C61,0x7F15,0x8651,0x6C2F,0x5F8B,0x7387,0x6EE4,0x7EFF,
0x5CE6,0x631B,0x5B6A,0x6EE6,0x5375,0x4E71,0x63A0,0x7565,
0x62A1,0x8F6E,0x4F26,0x4ED1,0x6CA6,0x7EB6,0x8BBA,0x841D,
0x87BA,0x7F57,0x903B,0x9523,0x7BA9,0x9AA1,0x88F8,0x843D,
0x6D1B,0x9A86,0x7EDC,0x5988,0x9EBB,0x739B,0x7801,0x8682,
0x9A6C,0x9A82,0x561B,0x5417,0x57CB,0x4E70,0x9EA6,0x5356,
0x8FC8,0x8109,0x7792,0x9992,0x86EE,0x6EE1,0x8513,0x66FC,
0x6162,0x6F2B,0x8C29,0x8292,0x832B,0x76F2,0x6C13,0x5FD9,
0x83BD,0x732B,0x8305,0x951A,0x6BDB,0x77DB,0x94C6,0x536F,
0x8302,0x5192,0x5E3D,0x8C8C,0x8D38,0x4E48,0x73AB,0x679A,
0x6885,0x9176,0x9709,0x7164,0x6CA1,0x7709,0x5A92,0x9541,
0x6BCF,0x7F8E,0x6627,0x5BD0,0x59B9,0x5A9A,0x95E8,0x95F7,
0x4EEC,0x840C,0x8499,0x6AAC,0x76DF,0x9530,0x731B,0x68A6,
0x5B5F,0x772F,0x919A,0x9761,0x7CDC,0x8FF7,0x8C1C,0x5F25,
0x7C73,0x79D8,0x89C5,0x6CCC,0x871C,0x5BC6,0x5E42,0x68C9,
0x7720,0x7EF5,0x5195,0x514D,0x52C9,0x5A29,0x7F05,0x9762,
0x82D7,0x63CF,0x7784,0x85D0,0x79D2,0x6E3A,0x5E99,0x5999,
0x8511,0x706D,0x6C11,0x62BF,0x76BF,0x654F,0x60AF,0x95FD,
0x660E,0x879F,0x9E23,0x94ED,0x540D,0x547D,0x8C2C,0x6478,
0x6479,0x8611,0x6A21,0x819C,0x78E8,0x6469,0x9B54,0x62B9,
0x672B,0x83AB,0x58A8,0x9ED8,0x6CAB,0x6F20,0x5BDE,0x964C,
0x8C0B,0x725F,0x67D0,0x62C7,0x7261,0x4EA9,0x59C6,0x6BCD,
0x5893,0x66AE,0x5E55,0x52DF,0x6155,0x6728,0x76EE,0x7766,
0x7267,0x7A46,0x62FF,0x54EA,0x5450,0x94A0,0x90A3,0x5A1C,
0x7EB3,0x6C16,0x4E43,0x5976,0x8010,0x5948,0x5357,0x7537,
0x96BE,0x56CA,0x6320,0x8111,0x607C,0x95F9,0x6DD6,0x5462,
0x9981,0x5185,0x5AE9,0x80FD,0x59AE,0x9713,0x502A,0x6CE5,
0x5C3C,0x62DF,0x4F60,0x533F,0x817B,0x9006,0x6EBA,0x852B,
0x62C8,0x5E74,0x78BE,0x64B5,0x637B,0x5FF5,0x5A18,0x917F,
0x9E1F,0x5C3F,0x634F,0x8042,0x5B7D,0x556E,0x954A,0x954D,
0x6D85,0x60A8,0x67E0,0x72DE,0x51DD,0x5B81,0x62E7,0x6CDE,
0x725B,0x626D,0x94AE,0x7EBD,0x8113,0x6D53,0x519C,0x5F04,
0x5974,0x52AA,0x6012,0x5973,0x6696,0x8650,0x759F,0x632A,
0x61E6,0x7CEF,0x8BFA,0x54E6,0x6B27,0x9E25,0x6BB4,0x85D5,
0x5455,0x5076,0x6CA4,0x556A,0x8DB4,0x722C,0x5E15,0x6015,
0x7436,0x62CD,0x6392,0x724C,0x5F98,0x6E43,0x6D3E,0x6500,
0x6F58,0x76D8,0x78D0,0x76FC,0x7554,0x5224,0x53DB,0x4E53,
0x5E9E,0x65C1,0x802A,0x80D6,0x629B,0x5486,0x5228,0x70AE,
0x888D,0x8DD1,0x6CE1,0x5478,0x80DA,0x57F9,0x88F4,0x8D54,
0x966A,0x914D,0x4F69,0x6C9B,0x55B7,0x76C6,0x7830,0x62A8,
0x70F9,0x6F8E,0x5F6D,0x84EC,0x68DA,0x787C,0x7BF7,0x81A8,
0x670B,0x9E4F,0x6367,0x78B0,0x576F,0x7812,0x9739,0x6279,
0x62AB,0x5288,0x7435,0x6BD7,0x5564,0x813E,0x75B2,0x76AE,
0x5339,0x75DE,0x50FB,0x5C41,0x8B6C,0x7BC7,0x504F,0x7247,
0x9A97,0x98D8,0x6F02,0x74E2,0x7968,0x6487,0x77A5,0x62FC,
0x9891,0x8D2B,0x54C1,0x8058,0x4E52,0x576A,0x82F9,0x840D,
0x5E73,0x51ED,0x74F6,0x8BC4,0x5C4F,0x5761,0x6CFC,0x9887,
0x5A46,0x7834,0x9B44,0x8FEB,0x7C95,0x5256,0x6251,0x94FA,
0x4EC6,0x8386,0x8461,0x83E9,0x84B2,0x57D4,0x6734,0x5703,
0x666E,0x6D66,0x8C31,0x66DD,0x7011,0x671F,0x6B3A,0x6816,
0x621A,0x59BB,0x4E03,0x51C4,0x6F06,0x67D2,0x6C8F,0x5176,
0x68CB,0x5947,0x6B67,0x7566,0x5D0E,0x8110,0x9F50,0x65D7,
0x7948,0x7941,0x9A91,0x8D77,0x5C82,0x4E5E,0x4F01,0x542F,
0x5951,0x780C,0x5668,0x6C14,0x8FC4,0x5F03,0x6C7D,0x6CE3,
0x8BAB,0x6390,0x6070,0x6D3D,0x7275,0x6266,0x948E,0x94C5,
0x5343,0x8FC1,0x7B7E,0x4EDF,0x8C26,0x4E7E,0x9ED4,0x94B1,
0x94B3,0x524D,0x6F5C,0x9063,0x6D45,0x8C34,0x5811,0x5D4C,
0x6B20,0x6B49,0x67AA,0x545B,0x8154,0x7F8C,0x5899,0x8537,
0x5F3A,0x62A2,0x6A47,0x9539,0x6572,0x6084,0x6865,0x77A7,
0x4E54,0x4FA8,0x5DE7,0x9798,0x64AC,0x7FD8,0x5CED,0x4FCF,
0x7A8D,0x5207,0x8304,0x4E14,0x602F,0x7A83,0x94A6,0x4FB5,
0x4EB2,0x79E6,0x7434,0x52E4,0x82B9,0x64D2,0x79BD,0x5BDD,
0x6C81,0x9752,0x8F7B,0x6C22,0x503E,0x537F,0x6E05,0x64CE,
0x6674,0x6C30,0x60C5,0x9877,0x8BF7,0x5E86,0x743C,0x7A77,
0x79CB,0x4E18,0x90B1,0x7403,0x6C42,0x56DA,0x914B,0x6CC5,
0x8D8B,0x533A,0x86C6,0x66F2,0x8EAF,0x5C48,0x9A71,0x6E20,
0x53D6,0x5A36,0x9F8B,0x8DA3,0x53BB,0x5708,0x98A7,0x6743,
0x919B,0x6CC9,0x5168,0x75CA,0x62F3,0x72AC,0x5238,0x529D,
0x7F3A,0x7094,0x7638,0x5374,0x9E4A,0x69B7,0x786E,0x96C0,
0x88D9,0x7FA4,0x7136,0x71C3,0x5189,0x67D3,0x74E4,0x58E4,
0x6518,0x56B7,0x8BA9,0x9976,0x6270,0x7ED5,0x60F9,0x70ED,
0x58EC,0x4EC1,0x4EBA,0x5FCD,0x97E7,0x4EFB,0x8BA4,0x5203,
0x598A,0x7EAB,0x6254,0x4ECD,0x65E5,0x620E,0x8338,0x84C9,
0x8363,0x878D,0x7194,0x6EB6,0x5BB9,0x7ED2,0x5197,0x63C9,
0x67D4,0x8089,0x8339,0x8815,0x5112,0x5B7A,0x5982,0x8FB1,
0x4E73,0x6C5D,0x5165,0x8925,0x8F6F,0x962E,0x854A,0x745E,
0x9510,0x95F0,0x6DA6,0x82E5,0x5F31,0x6492,0x6D12,0x8428,
0x816E,0x9CC3,0x585E,0x8D5B,0x4E09,0x53C1,0x4F1E,0x6563,
0x6851,0x55D3,0x4E27,0x6414,0x9A9A,0x626B,0x5AC2,0x745F,
0x8272,0x6DA9,0x68EE,0x50E7,0x838E,0x7802,0x6740,0x5239,
0x6C99,0x7EB1,0x50BB,0x5565,0x715E,0x7B5B,0x6652,0x73CA,
0x82EB,0x6749,0x5C71,0x5220,0x717D,0x886B,0x95EA,0x9655,
0x64C5,0x8D61,0x81B3,0x5584,0x6C55,0x6247,0x7F2E,0x5892,
0x4F24,0x5546,0x8D4F,0x664C,0x4E0A,0x5C1A,0x88F3,0x68A2,
0x634E,0x7A0D,0x70E7,0x828D,0x52FA,0x97F6,0x5C11,0x54E8,
0x90B5,0x7ECD,0x5962,0x8D4A,0x86C7,0x820C,0x820D,0x8D66,
0x6444,0x5C04,0x6151,0x6D89,0x793E,0x8BBE,0x7837,0x7533,
0x547B,0x4F38,0x8EAB,0x6DF1,0x5A20,0x7EC5,0x795E,0x6C88,
0x5BA1,0x5A76,0x751A,0x80BE,0x614E,0x6E17,0x58F0,0x751F,
0x7525,0x7272,0x5347,0x7EF3,0x7701,0x76DB,0x5269,0x80DC,
0x5723,0x5E08,0x5931,0x72EE,0x65BD,0x6E7F,0x8BD7,0x5C38,
0x8671,0x5341,0x77F3,0x62FE,0x65F6,0x4EC0,0x98DF,0x8680,
0x5B9E,0x8BC6,0x53F2,0x77E2,0x4F7F,0x5C4E,0x9A76,0x59CB,
0x5F0F,0x793A,0x58EB,0x4E16,0x67FF,0x4E8B,0x62ED,0x8A93,
0x901D,0x52BF,0x662F,0x55DC,0x566C,0x9002,0x4ED5,0x4F8D,
0x91CA,0x9970,0x6C0F,0x5E02,0x6043,0x5BA4,0x89C6,0x8BD5,
0x6536,0x624B,0x9996,0x5B88,0x5BFF,0x6388,0x552E,0x53D7,
0x7626,0x517D,0x852C,0x67A2,0x68B3,0x6B8A,0x6292,0x8F93,
0x53D4,0x8212,0x6DD1,0x758F,0x4E66,0x8D4E,0x5B70,0x719F,
0x85AF,0x6691,0x66D9,0x7F72,0x8700,0x9ECD,0x9F20,0x5C5E,
0x672F,0x8FF0,0x6811,0x675F,0x620D,0x7AD6,0x5885,0x5EB6,
0x6570,0x6F31,0x6055,0x5237,0x800D,0x6454,0x8870,0x7529,
0x5E05,0x6813,0x62F4,0x971C,0x53CC,0x723D,0x8C01,0x6C34,
0x7761,0x7A0E,0x542E,0x77AC,0x987A,0x821C,0x8BF4,0x7855,
0x6714,0x70C1,0x65AF,0x6495,0x5636,0x601D,0x79C1,0x53F8,
0x4E1D,0x6B7B,0x8086,0x5BFA,0x55E3,0x56DB,0x4F3A,0x4F3C,
0x9972,0x5DF3,0x677E,0x8038,0x6002,0x9882,0x9001,0x5B8B,
0x8BBC,0x8BF5,0x641C,0x8258,0x64DE,0x55FD,0x82CF,0x9165,
0x4FD7,0x7D20,0x901F,0x7C9F,0x50F3,0x5851,0x6EAF,0x5BBF,
0x8BC9,0x8083,0x9178,0x849C,0x7B97,0x867D,0x968B,0x968F,
0x7EE5,0x9AD3,0x788E,0x5C81,0x7A57,0x9042,0x96A7,0x795F,
0x5B59,0x635F,0x7B0B,0x84D1,0x68AD,0x5506,0x7F29,0x7410,
0x7D22,0x9501,0x6240,0x584C,0x4ED6,0x5B83,0x5979,0x5854,
0x736D,0x631E,0x8E4B,0x8E0F,0x80CE,0x82D4,0x62AC,0x53F0,
0x6CF0,0x915E,0x592A,0x6001,0x6C70,0x574D,0x644A,0x8D2A,
0x762B,0x6EE9,0x575B,0x6A80,0x75F0,0x6F6D,0x8C2D,0x8C08,
0x5766,0x6BEF,0x8892,0x78B3,0x63A2,0x53F9,0x70AD,0x6C64,
0x5858,0x642A,0x5802,0x68E0,0x819B,0x5510,0x7CD6,0x5018,
0x8EBA,0x6DCC,0x8D9F,0x70EB,0x638F,0x6D9B,0x6ED4,0x7EE6,
0x8404,0x6843,0x9003,0x6DD8,0x9676,0x8BA8,0x5957,0x7279,
0x85E4,0x817E,0x75BC,0x8A8A,0x68AF,0x5254,0x8E22,0x9511,
0x63D0,0x9898,0x8E44,0x557C,0x4F53,0x66FF,0x568F,0x60D5,
0x6D95,0x5243,0x5C49,0x5929,0x6DFB,0x586B,0x7530,0x751C,
0x606C,0x8214,0x8146,0x6311,0x6761,0x8FE2,0x773A,0x8DF3,
0x8D34,0x94C1,0x5E16,0x5385,0x542C,0x70C3,0x6C40,0x5EF7,
0x505C,0x4EAD,0x5EAD,0x633A,0x8247,0x901A,0x6850,0x916E,
0x77B3,0x540C,0x94DC,0x5F64,0x7AE5,0x6876,0x6345,0x7B52,
0x7EDF,0x75DB,0x5077,0x6295,0x5934,0x900F,0x51F8,0x79C3,
0x7A81,0x56FE,0x5F92,0x9014,0x6D82,0x5C60,0x571F,0x5410,
0x5154,0x6E4D,0x56E2,0x63A8,0x9893,0x817F,0x8715,0x892A,
0x9000,0x541E,0x5C6F,0x81C0,0x62D6,0x6258,0x8131,0x9E35,
0x9640,0x9A6E,0x9A7C,0x692D,0x59A5,0x62D3,0x553E,0x6316,
0x54C7,0x86D9,0x6D3C,0x5A03,0x74E6,0x889C,0x6B6A,0x5916,
0x8C4C,0x5F2F,0x6E7E,0x73A9,0x987D,0x4E38,0x70F7,0x5B8C,
0x7897,0x633D,0x665A,0x7696,0x60CB,0x5B9B,0x5A49,0x4E07,
0x8155,0x6C6A,0x738B,0x4EA1,0x6789,0x7F51,0x5F80,0x65FA,
0x671B,0x5FD8,0x5984,0x5A01,0x5DCD,0x5FAE,0x5371,0x97E6,
0x8FDD,0x6845,0x56F4,0x552F,0x60DF,0x4E3A,0x6F4D,0x7EF4,
0x82C7,0x840E,0x59D4,0x4F1F,0x4F2A,0x5C3E,0x7EAC,0x672A,
0x851A,0x5473,0x754F,0x80C3,0x5582,0x9B4F,0x4F4D,0x6E2D,
0x8C13,0x5C09,0x6170,0x536B,0x761F,0x6E29,0x868A,0x6587,
0x95FB,0x7EB9,0x543B,0x7A33,0x7D0A,0x95EE,0x55E1,0x7FC1,
0x74EE,0x631D,0x8717,0x6DA1,0x7A9D,0x6211,0x65A1,0x5367,
0x63E1,0x6C83,0x5DEB,0x545C,0x94A8,0x4E4C,0x6C61,0x8BEC,
0x5C4B,0x65E0,0x829C,0x68A7,0x543E,0x5434,0x6BCB,0x6B66,
0x4E94,0x6342,0x5348,0x821E,0x4F0D,0x4FAE,0x575E,0x620A,
0x96FE,0x6664,0x7269,0x52FF,0x52A1,0x609F,0x8BEF,0x6614,
0x7199,0x6790,0x897F,0x7852,0x77FD,0x6670,0x563B,0x5438,
0x9521,0x727A,0x7A00,0x606F,0x5E0C,0x6089,0x819D,0x5915,
0x60DC,0x7184,0x70EF,0x6EAA,0x6C50,0x7280,0x6A84,0x88AD,
0x5E2D,0x4E60,0x5AB3,0x559C,0x94E3,0x6D17,0x7CFB,0x9699,
0x620F,0x7EC6,0x778E,0x867E,0x5323,0x971E,0x8F96,0x6687,
0x5CE1,0x4FA0,0x72ED,0x4E0B,0x53A6,0x590F,0x5413,0x6380,
0x9528,0x5148,0x4ED9,0x9C9C,0x7EA4,0x54B8,0x8D24,0x8854,
0x8237,0x95F2,0x6D8E,0x5F26,0x5ACC,0x663E,0x9669,0x73B0,
0x732E,0x53BF,0x817A,0x9985,0x7FA1,0x5BAA,0x9677,0x9650,
0x7EBF,0x76F8,0x53A2,0x9576,0x9999,0x7BB1,0x8944,0x6E58,
0x4E61,0x7FD4,0x7965,0x8BE6,0x60F3,0x54CD,0x4EAB,0x9879,
0x5DF7,0x6A61,0x50CF,0x5411,0x8C61,0x8427,0x785D,0x9704,
0x524A,0x54EE,0x56A3,0x9500,0x6D88,0x5BB5,0x6DC6,0x6653,
0x5C0F,0x5B5D,0x6821,0x8096,0x5578,0x7B11,0x6548,0x6954,
0x4E9B,0x6B47,0x874E,0x978B,0x534F,0x631F,0x643A,0x90AA,
0x659C,0x80C1,0x8C10,0x5199,0x68B0,0x5378,0x87F9,0x61C8,
0x6CC4,0x6CFB,0x8C22,0x5C51,0x85AA,0x82AF,0x950C,0x6B23,
0x8F9B,0x65B0,0x5FFB,0x5FC3,0x4FE1,0x8845,0x661F,0x8165,
0x7329,0x60FA,0x5174,0x5211,0x578B,0x5F62,0x90A2,0x884C,
0x9192,0x5E78,0x674F,0x6027,0x59D3,0x5144,0x51F6,0x80F8,
0x5308,0x6C79,0x96C4,0x718A,0x4F11,0x4FEE,0x7F9E,0x673D,
0x55C5,0x9508,0x79C0,0x8896,0x7EE3,0x589F,0x620C,0x9700,
0x865A,0x5618,0x987B,0x5F90,0x8BB8,0x84C4,0x9157,0x53D9,
0x65ED,0x5E8F,0x755C,0x6064,0x7D6E,0x5A7F,0x7EEA,0x7EED,
0x8F69,0x55A7,0x5BA3,0x60AC,0x65CB,0x7384,0x9009,0x7663,
0x7729,0x7EDA,0x9774,0x859B,0x5B66,0x7A74,0x96EA,0x8840,
0x52CB,0x718F,0x5FAA,0x65EC,0x8BE2,0x5BFB,0x9A6F,0x5DE1,
0x6B89,0x6C5B,0x8BAD,0x8BAF,0x900A,0x8FC5,0x538B,0x62BC,
0x9E26,0x9E2D,0x5440,0x4E2B,0x82BD,0x7259,0x869C,0x5D16,
0x8859,0x6DAF,0x96C5,0x54D1,0x4E9A,0x8BB6,0x7109,0x54BD,
0x9609,0x70DF,0x6DF9,0x76D0,0x4E25,0x7814,0x8712,0x5CA9,
0x5EF6,0x8A00,0x989C,0x960E,0x708E,0x6CBF,0x5944,0x63A9,
0x773C,0x884D,0x6F14,0x8273,0x5830,0x71D5,0x538C,0x781A,
0x96C1,0x5501,0x5F66,0x7130,0x5BB4,0x8C1A,0x9A8C,0x6B83,
0x592E,0x9E2F,0x79E7,0x6768,0x626C,0x4F6F,0x75A1,0x7F8A,
0x6D0B,0x9633,0x6C27,0x4EF0,0x75D2,0x517B,0x6837,0x6F3E,
0x9080,0x8170,0x5996,0x7476,0x6447,0x5C27,0x9065,0x7A91,
0x8C23,0x59DA,0x54AC,0x8200,0x836F,0x8981,0x8000,0x6930,
0x564E,0x8036,0x7237,0x91CE,0x51B6,0x4E5F,0x9875,0x6396,
0x4E1A,0x53F6,0x66F3,0x814B,0x591C,0x6DB2,0x4E00,0x58F9,
0x533B,0x63D6,0x94F1,0x4F9D,0x4F0A,0x8863,0x9890,0x5937,
0x9057,0x79FB,0x4EEA,0x80F0,0x7591,0x6C82,0x5B9C,0x59E8,
0x5F5D,0x6905,0x8681,0x501A,0x5DF2,0x4E59,0x77E3,0x4EE5,
0x827A,0x6291,0x6613,0x9091,0x5C79,0x4EBF,0x5F79,0x81C6,
0x9038,0x8084,0x75AB,0x4EA6,0x88D4,0x610F,0x6BC5,0x5FC6,
0x4E49,0x76CA,0x6EA2,0x8BE3,0x8BAE,0x8C0A,0x8BD1,0x5F02,
0x7FFC,0x7FCC,0x7ECE,0x8335,0x836B,0x56E0,0x6BB7,0x97F3,
0x9634,0x59FB,0x541F,0x94F6,0x6DEB,0x5BC5,0x996E,0x5C39,
0x5F15,0x9690,0x5370,0x82F1,0x6A31,0x5A74,0x9E70,0x5E94,
0x7F28,0x83B9,0x8424,0x8425,0x8367,0x8747,0x8FCE,0x8D62,
0x76C8,0x5F71,0x9896,0x786C,0x6620,0x54DF,0x62E5,0x4F63,
0x81C3,0x75C8,0x5EB8,0x96CD,0x8E0A,0x86F9,0x548F,0x6CF3,
0x6D8C,0x6C38,0x607F,0x52C7,0x7528,0x5E7D,0x4F18,0x60A0,
0x5FE7,0x5C24,0x7531,0x90AE,0x94C0,0x72B9,0x6CB9,0x6E38,
0x9149,0x6709,0x53CB,0x53F3,0x4F51,0x91C9,0x8BF1,0x53C8,
0x5E7C,0x8FC2,0x6DE4,0x4E8E,0x76C2,0x6986,0x865E,0x611A,
0x8206,0x4F59,0x4FDE,0x903E,0x9C7C,0x6109,0x6E1D,0x6E14,
0x9685,0x4E88,0x5A31,0x96E8,0x4E0E,0x5C7F,0x79B9,0x5B87,
0x8BED,0x7FBD,0x7389,0x57DF,0x828B,0x90C1,0x5401,0x9047,
0x55BB,0x5CEA,0x5FA1,0x6108,0x6B32,0x72F1,0x80B2,0x8A89,
0x6D74,0x5BD3,0x88D5,0x9884,0x8C6B,0x9A6D,0x9E33,0x6E0A,
0x51A4,0x5143,0x57A3,0x8881,0x539F,0x63F4,0x8F95,0x56ED,
0x5458,0x5706,0x733F,0x6E90,0x7F18,0x8FDC,0x82D1,0x613F,
0x6028,0x9662,0x66F0,0x7EA6,0x8D8A,0x8DC3,0x94A5,0x5CB3,
0x7CA4,0x6708,0x60A6,0x9605,0x8018,0x4E91,0x90E7,0x5300,
0x9668,0x5141,0x8FD0,0x8574,0x915D,0x6655,0x97F5,0x5B55,
0x531D,0x7838,0x6742,0x683D,0x54C9,0x707E,0x5BB0,0x8F7D,
0x518D,0x5728,0x54B1,0x6512,0x6682,0x8D5E,0x8D43,0x810F,
0x846C,0x906D,0x7CDF,0x51FF,0x85FB,0x67A3,0x65E9,0x6FA1,
0x86A4,0x8E81,0x566A,0x9020,0x7682,0x7076,0x71E5,0x8D23,
0x62E9,0x5219,0x6CFD,0x8D3C,0x600E,0x589E,0x618E,0x66FE,
0x8D60,0x624E,0x55B3,0x6E23,0x672D,0x8F67,0x94E1,0x95F8,
0x7728,0x6805,0x69A8,0x548B,0x4E4D,0x70B8,0x8BC8,0x6458,
0x658B,0x5B85,0x7A84,0x503A,0x5BE8,0x77BB,0x6BE1,0x8A79,
0x7C98,0x6CBE,0x76CF,0x65A9,0x8F97,0x5D2D,0x5C55,0x8638,
0x6808,0x5360,0x6218,0x7AD9,0x6E5B,0x7EFD,0x6A1F,0x7AE0,
0x5F70,0x6F33,0x5F20,0x638C,0x6DA8,0x6756,0x4E08,0x5E10,
0x8D26,0x4ED7,0x80C0,0x7634,0x969C,0x62DB,0x662D,0x627E,
0x6CBC,0x8D75,0x7167,0x7F69,0x5146,0x8087,0x53EC,0x906E,
0x6298,0x54F2,0x86F0,0x8F99,0x8005,0x9517,0x8517,0x8FD9,
0x6D59,0x73CD,0x659F,0x771F,0x7504,0x7827,0x81FB,0x8D1E,
0x9488,0x4FA6,0x6795,0x75B9,0x8BCA,0x9707,0x632F,0x9547,
0x9635,0x84B8,0x6323,0x7741,0x5F81,0x72F0,0x4E89,0x6014,
0x6574,0x62EF,0x6B63,0x653F,0x5E27,0x75C7,0x90D1,0x8BC1,
0x829D,0x679D,0x652F,0x5431,0x8718,0x77E5,0x80A2,0x8102,
0x6C41,0x4E4B,0x7EC7,0x804C,0x76F4,0x690D,0x6B96,0x6267,
0x503C,0x4F84,0x5740,0x6307,0x6B62,0x8DBE,0x53EA,0x65E8,
0x7EB8,0x5FD7,0x631A,0x63B7,0x81F3,0x81F4,0x7F6E,0x5E1C,
0x5CD9,0x5236,0x667A,0x79E9,0x7A1A,0x8D28,0x7099,0x75D4,
0x6EDE,0x6CBB,0x7A92,0x4E2D,0x76C5,0x5FE0,0x949F,0x8877,
0x7EC8,0x79CD,0x80BF,0x91CD,0x4EF2,0x4F17,0x821F,0x5468,
0x5DDE,0x6D32,0x8BCC,0x7CA5,0x8F74,0x8098,0x5E1A,0x5492,
0x76B1,0x5B99,0x663C,0x9AA4,0x73E0,0x682A,0x86DB,0x6731,
0x732A,0x8BF8,0x8BDB,0x9010,0x7AF9,0x70DB,0x716E,0x62C4,
0x77A9,0x5631,0x4E3B,0x8457,0x67F1,0x52A9,0x86C0,0x8D2E,
0x94F8,0x7B51,0x4F4F,0x6CE8,0x795D,0x9A7B,0x6293,0x722A,
0x62FD,0x4E13,0x7816,0x8F6C,0x64B0,0x8D5A,0x7BC6,0x6869,
0x5E84,0x88C5,0x5986,0x649E,0x58EE,0x72B6,0x690E,0x9525,
0x8FFD,0x8D58,0x5760,0x7F00,0x8C06,0x51C6,0x6349,0x62D9,
0x5353,0x684C,0x7422,0x8301,0x914C,0x5544,0x7740,0x707C,
0x6D4A,0x5179,0x54A8,0x8D44,0x59FF,0x6ECB,0x6DC4,0x5B5C,
0x7D2B,0x4ED4,0x7C7D,0x6ED3,0x5B50,0x81EA,0x6E0D,0x5B57,
0x9B03,0x68D5,0x8E2A,0x5B97,0x7EFC,0x603B,0x7EB5,0x90B9,
0x8D70,0x594F,0x63CD,0x79DF,0x8DB3,0x5352,0x65CF,0x7956,
0x8BC5,0x963B,0x7EC4,0x94BB,0x7E82,0x5634,0x9189,0x6700,
0x7F6A,0x5C0A,0x9075,0x6628,0x5DE6,0x4F50,0x67DE,0x505A,
0x4F5C,0x5750,0x5EA7,0x2000,0x2000,0x2000,0x2000,0x2000,
0x4E8D,0x4E0C,0x5140,0x4E10,0x5EFF,0x5345,0x4E15,0x4E98,
0x4E1E,0x9B32,0x5B6C,0x5669,0x4E28,0x79BA,0x4E3F,0x5315,
0x4E47,0x592D,0x723B,0x536E,0x6C10,0x56DF,0x80E4,0x9997,
0x6BD3,0x777E,0x9F17,0x4E36,0x4E9F,0x9F10,0x4E5C,0x4E69,
0x4E93,0x8288,0x5B5B,0x556C,0x560F,0x4EC4,0x538D,0x539D,
0x53A3,0x53A5,0x53AE,0x9765,0x8D5D,0x531A,0x53F5,0x5326,
0x532E,0x533E,0x8D5C,0x5366,0x5363,0x5202,0x5208,0x520E,
0x522D,0x5233,0x523F,0x5240,0x524C,0x525E,0x5261,0x525C,
0x84AF,0x527D,0x5282,0x5281,0x5290,0x5293,0x5182,0x7F54,
0x4EBB,0x4EC3,0x4EC9,0x4EC2,0x4EE8,0x4EE1,0x4EEB,0x4EDE,
0x4F1B,0x4EF3,0x4F22,0x4F64,0x4EF5,0x4F25,0x4F27,0x4F09,
0x4F2B,0x4F5E,0x4F67,0x6538,0x4F5A,0x4F5D,0x4F5F,0x4F57,
0x4F32,0x4F3D,0x4F76,0x4F74,0x4F91,0x4F89,0x4F83,0x4F8F,
0x4F7E,0x4F7B,0x4FAA,0x4F7C,0x4FAC,0x4F94,0x4FE6,0x4FE8,
0x4FEA,0x4FC5,0x4FDA,0x4FE3,0x4FDC,0x4FD1,0x4FDF,0x4FF8,
0x5029,0x504C,0x4FF3,0x502C,0x500F,0x502E,0x502D,0x4FFE,
0x501C,0x500C,0x5025,0x5028,0x507E,0x5043,0x5055,0x5048,
0x504E,0x506C,0x507B,0x50A5,0x50A7,0x50A9,0x50BA,0x50D6,
0x5106,0x50ED,0x50EC,0x50E6,0x50EE,0x5107,0x510B,0x4EDD,
0x6C3D,0x4F58,0x4F65,0x4FCE,0x9FA0,0x6C46,0x7C74,0x516E,
0x5DFD,0x9EC9,0x9998,0x5181,0x5914,0x52F9,0x530D,0x8A07,
0x5310,0x51EB,0x5919,0x5155,0x4EA0,0x5156,0x4EB3,0x886E,
0x88A4,0x4EB5,0x8114,0x88D2,0x7980,0x5B34,0x8803,0x7FB8,
0x51AB,0x51B1,0x51BD,0x51BC,0x51C7,0x5196,0x51A2,0x51A5,
0x8BA0,0x8BA6,0x8BA7,0x8BAA,0x8BB4,0x8BB5,0x8BB7,0x8BC2,
0x8BC3,0x8BCB,0x8BCF,0x8BCE,0x8BD2,0x8BD3,0x8BD4,0x8BD6,
0x8BD8,0x8BD9,0x8BDC,0x8BDF,0x8BE0,0x8BE4,0x8BE8,0x8BE9,
0x8BEE,0x8BF0,0x8BF3,0x8BF6,0x8BF9,0x8BFC,0x8BFF,0x8C00,
0x8C02,0x8C04,0x8C07,0x8C0C,0x8C0F,0x8C11,0x8C12,0x8C14,
0x8C15,0x8C16,0x8C19,0x8C1B,0x8C18,0x8C1D,0x8C1F,0x8C20,
0x8C21,0x8C25,0x8C27,0x8C2A,0x8C2B,0x8C2E,0x8C2F,0x8C32,
0x8C33,0x8C35,0x8C36,0x5369,0x537A,0x961D,0x9622,0x9621,
0x9631,0x962A,0x963D,0x963C,0x9642,0x9649,0x9654,0x965F,
0x9667,0x966C,0x9672,0x9674,0x9688,0x968D,0x9697,0x96B0,
0x9097,0x909B,0x909D,0x9099,0x90AC,0x90A1,0x90B4,0x90B3,
0x90B6,0x90BA,0x90B8,0x90B0,0x90CF,0x90C5,0x90BE,0x90D0,
0x90C4,0x90C7,0x90D3,0x90E6,0x90E2,0x90DC,0x90D7,0x90DB,
0x90EB,0x90EF,0x90FE,0x9104,0x9122,0x911E,0x9123,0x9131,
0x912F,0x9139,0x9143,0x9146,0x520D,0x5942,0x52A2,0x52AC,
0x52AD,0x52BE,0x54FF,0x52D0,0x52D6,0x52F0,0x53DF,0x71EE,
0x77CD,0x5EF4,0x51F5,0x51FC,0x9B2F,0x53B6,0x5F01,0x755A,
0x5DEF,0x574C,0x57A9,0x57A1,0x587E,0x58BC,0x58C5,0x58D1,
0x5729,0x572C,0x572A,0x5733,0x5739,0x572E,0x572F,0x575C,
0x573B,0x5742,0x5769,0x5785,0x576B,0x5786,0x577C,0x577B,
0x5768,0x576D,0x5776,0x5773,0x57AD,0x57A4,0x578C,0x57B2,
0x57CF,0x57A7,0x57B4,0x5793,0x57A0,0x57D5,0x57D8,0x57DA,
0x57D9,0x57D2,0x57B8,0x57F4,0x57EF,0x57F8,0x57E4,0x57DD,
0x580B,0x580D,0x57FD,0x57ED,0x5800,0x581E,0x5819,0x5844,
0x5820,0x5865,0x586C,0x5881,0x5889,0x589A,0x5880,0x99A8,
0x9F19,0x61FF,0x8279,0x827D,0x827F,0x828F,0x828A,0x82A8,
0x8284,0x828E,0x8291,0x8297,0x8299,0x82AB,0x82B8,0x82BE,
0x82B0,0x82C8,0x82CA,0x82E3,0x8298,0x82B7,0x82AE,0x82CB,
0x82CC,0x82C1,0x82A9,0x82B4,0x82A1,0x82AA,0x829F,0x82C4,
0x82CE,0x82A4,0x82E1,0x8309,0x82F7,0x82E4,0x830F,0x8307,
0x82DC,0x82F4,0x82D2,0x82D8,0x830C,0x82FB,0x82D3,0x8311,
0x831A,0x8306,0x8314,0x8315,0x82E0,0x82D5,0x831C,0x8351,
0x835B,0x835C,0x8308,0x8392,0x833C,0x8334,0x8331,0x839B,
0x835E,0x832F,0x834F,0x8347,0x8343,0x835F,0x8340,0x8317,
0x8360,0x832D,0x833A,0x8333,0x8366,0x8365,0x8368,0x831B,
0x8369,0x836C,0x836A,0x836D,0x836E,0x83B0,0x8378,0x83B3,
0x83B4,0x83A0,0x83AA,0x8393,0x839C,0x8385,0x837C,0x83B6,
0x83A9,0x837D,0x83B8,0x837B,0x8398,0x839E,0x83A8,0x83BA,
0x83BC,0x83C1,0x8401,0x83E5,0x83D8,0x5807,0x8418,0x840B,
0x83DD,0x83FD,0x83D6,0x841C,0x8438,0x8411,0x8406,0x83D4,
0x83DF,0x840F,0x8403,0x83F8,0x83F9,0x83EA,0x83C5,0x83C0,
0x8426,0x83F0,0x83E1,0x845C,0x8451,0x845A,0x8459,0x8473,
0x8487,0x8488,0x847A,0x8489,0x8478,0x843C,0x8446,0x8469,
0x8476,0x848C,0x848E,0x8431,0x846D,0x84C1,0x84CD,0x84D0,
0x84E6,0x84BD,0x84D3,0x84CA,0x84BF,0x84BA,0x84E0,0x84A1,
0x84B9,0x84B4,0x8497,0x84E5,0x84E3,0x850C,0x750D,0x8538,
0x84F0,0x8539,0x851F,0x853A,0x8556,0x853B,0x84FF,0x84FC,
0x8559,0x8548,0x8568,0x8564,0x855E,0x857A,0x77A2,0x8543,
0x8572,0x857B,0x85A4,0x85A8,0x8587,0x858F,0x8579,0x85AE,
0x859C,0x8585,0x85B9,0x85B7,0x85B0,0x85D3,0x85C1,0x85DC,
0x85FF,0x8627,0x8605,0x8629,0x8616,0x863C,0x5EFE,0x5F08,
0x593C,0x5941,0x8037,0x5955,0x595A,0x5958,0x530F,0x5C22,
0x5C25,0x5C2C,0x5C34,0x624C,0x626A,0x629F,0x62BB,0x62CA,
0x62DA,0x62D7,0x62EE,0x6322,0x62F6,0x6339,0x634B,0x6343,
0x63AD,0x63F6,0x6371,0x637A,0x638E,0x63B4,0x636D,0x63AC,
0x638A,0x6369,0x63AE,0x63BC,0x63F2,0x63F8,0x63E0,0x63FF,
0x63C4,0x63DE,0x63CE,0x6452,0x63C6,0x63BE,0x6445,0x6441,
0x640B,0x641B,0x6420,0x640C,0x6426,0x6421,0x645E,0x6484,
0x646D,0x6496,0x647A,0x64B7,0x64B8,0x6499,0x64BA,0x64C0,
0x64D0,0x64D7,0x64E4,0x64E2,0x6509,0x6525,0x652E,0x5F0B,
0x5FD2,0x7519,0x5F11,0x535F,0x53F1,0x53FD,0x53E9,0x53E8,
0x53FB,0x5412,0x5416,0x5406,0x544B,0x5452,0x5453,0x5454,
0x5456,0x5443,0x5421,0x5457,0x5459,0x5423,0x5432,0x5482,
0x5494,0x5477,0x5471,0x5464,0x549A,0x549B,0x5484,0x5476,
0x5466,0x549D,0x54D0,0x54AD,0x54C2,0x54B4,0x54D2,0x54A7,
0x54A6,0x54D3,0x54D4,0x5472,0x54A3,0x54D5,0x54BB,0x54BF,
0x54CC,0x54D9,0x54DA,0x54DC,0x54A9,0x54AA,0x54A4,0x54DD,
0x54CF,0x54DE,0x551B,0x54E7,0x5520,0x54FD,0x5514,0x54F3,
0x5522,0x5523,0x550F,0x5511,0x5527,0x552A,0x5567,0x558F,
0x55B5,0x5549,0x556D,0x5541,0x5555,0x553F,0x5550,0x553C,
0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530,0x555C,
0x558B,0x55D2,0x5583,0x55B1,0x55B9,0x5588,0x5581,0x559F,
0x557E,0x55D6,0x5591,0x557B,0x55DF,0x55BD,0x55BE,0x5594,
0x5599,0x55EA,0x55F7,0x55C9,0x561F,0x55D1,0x55EB,0x55EC,
0x55D4,0x55E6,0x55DD,0x55C4,0x55EF,0x55E5,0x55F2,0x55F3,
0x55CC,0x55CD,0x55E8,0x55F5,0x55E4,0x8F94,0x561E,0x5608,
0x560C,0x5601,0x5624,0x5623,0x55FE,0x5600,0x5627,0x562D,
0x5658,0x5639,0x5657,0x562C,0x564D,0x5662,0x5659,0x565C,
0x564C,0x5654,0x5686,0x5664,0x5671,0x566B,0x567B,0x567C,
0x5685,0x5693,0x56AF,0x56D4,0x56D7,0x56DD,0x56E1,0x56F5,
0x56EB,0x56F9,0x56FF,0x5704,0x570A,0x5709,0x571C,0x5E0F,
0x5E19,0x5E14,0x5E11,0x5E31,0x5E3B,0x5E3C,0x5E37,0x5E44,
0x5E54,0x5E5B,0x5E5E,0x5E61,0x5C8C,0x5C7A,0x5C8D,0x5C90,
0x5C96,0x5C88,0x5C98,0x5C99,0x5C91,0x5C9A,0x5C9C,0x5CB5,
0x5CA2,0x5CBD,0x5CAC,0x5CAB,0x5CB1,0x5CA3,0x5CC1,0x5CB7,
0x5CC4,0x5CD2,0x5CE4,0x5CCB,0x5CE5,0x5D02,0x5D03,0x5D27,
0x5D26,0x5D2E,0x5D24,0x5D1E,0x5D06,0x5D1B,0x5D58,0x5D3E,
0x5D34,0x5D3D,0x5D6C,0x5D5B,0x5D6F,0x5D5D,0x5D6B,0x5D4B,
0x5D4A,0x5D69,0x5D74,0x5D82,0x5D99,0x5D9D,0x8C73,0x5DB7,
0x5DC5,0x5F73,0x5F77,0x5F82,0x5F87,0x5F89,0x5F8C,0x5F95,
0x5F99,0x5F9C,0x5FA8,0x5FAD,0x5FB5,0x5FBC,0x8862,0x5F61,
0x72AD,0x72B0,0x72B4,0x72B7,0x72B8,0x72C3,0x72C1,0x72CE,
0x72CD,0x72D2,0x72E8,0x72EF,0x72E9,0x72F2,0x72F4,0x72F7,
0x7301,0x72F3,0x7303,0x72FA,0x72FB,0x7317,0x7313,0x7321,
0x730A,0x731E,0x731D,0x7315,0x7322,0x7339,0x7325,0x732C,
0x7338,0x7331,0x7350,0x734D,0x7357,0x7360,0x736C,0x736F,
0x737E,0x821B,0x5925,0x98E7,0x5924,0x5902,0x9963,0x9967,
0x9968,0x9969,0x996A,0x996B,0x996C,0x9974,0x9977,0x997D,
0x9980,0x9984,0x9987,0x998A,0x998D,0x9990,0x9991,0x9993,
0x9994,0x9995,0x5E80,0x5E91,0x5E8B,0x5E96,0x5EA5,0x5EA0,
0x5EB9,0x5EB5,0x5EBE,0x5EB3,0x8D53,0x5ED2,0x5ED1,0x5EDB,
0x5EE8,0x5EEA,0x81BA,0x5FC4,0x5FC9,0x5FD6,0x5FCF,0x6003,
0x5FEE,0x6004,0x5FE1,0x5FE4,0x5FFE,0x6005,0x6006,0x5FEA,
0x5FED,0x5FF8,0x6019,0x6035,0x6026,0x601B,0x600F,0x600D,
0x6029,0x602B,0x600A,0x603F,0x6021,0x6078,0x6079,0x607B,
0x607A,0x6042,0x606A,0x607D,0x6096,0x609A,0x60AD,0x609D,
0x6083,0x6092,0x608C,0x609B,0x60EC,0x60BB,0x60B1,0x60DD,
0x60D8,0x60C6,0x60DA,0x60B4,0x6120,0x6126,0x6115,0x6123,
0x60F4,0x6100,0x610E,0x612B,0x614A,0x6175,0x61AC,0x6194,
0x61A7,0x61B7,0x61D4,0x61F5,0x5FDD,0x96B3,0x95E9,0x95EB,
0x95F1,0x95F3,0x95F5,0x95F6,0x95FC,0x95FE,0x9603,0x9604,
0x9606,0x9608,0x960A,0x960B,0x960C,0x960D,0x960F,0x9612,
0x9615,0x9616,0x9617,0x9619,0x961A,0x4E2C,0x723F,0x6215,
0x6C35,0x6C54,0x6C5C,0x6C4A,0x6CA3,0x6C85,0x6C90,0x6C94,
0x6C8C,0x6C68,0x6C69,0x6C74,0x6C76,0x6C86,0x6CA9,0x6CD0,
0x6CD4,0x6CAD,0x6CF7,0x6CF8,0x6CF1,0x6CD7,0x6CB2,0x6CE0,
0x6CD6,0x6CFA,0x6CEB,0x6CEE,0x6CB1,0x6CD3,0x6CEF,0x6CFE,
0x6D39,0x6D27,0x6D0C,0x6D43,0x6D48,0x6D07,0x6D04,0x6D19,
0x6D0E,0x6D2B,0x6D4D,0x6D2E,0x6D35,0x6D1A,0x6D4F,0x6D52,
0x6D54,0x6D33,0x6D91,0x6D6F,0x6D9E,0x6DA0,0x6D5E,0x6D93,
0x6D94,0x6D5C,0x6D60,0x6D7C,0x6D63,0x6E1A,0x6DC7,0x6DC5,
0x6DDE,0x6E0E,0x6DBF,0x6DE0,0x6E11,0x6DE6,0x6DDD,0x6DD9,
0x6E16,0x6DAB,0x6E0C,0x6DAE,0x6E2B,0x6E6E,0x6E4E,0x6E6B,
0x6EB2,0x6E5F,0x6E86,0x6E53,0x6E54,0x6E32,0x6E25,0x6E44,
0x6EDF,0x6EB1,0x6E98,0x6EE0,0x6F2D,0x6EE2,0x6EA5,0x6EA7,
0x6EBD,0x6EBB,0x6EB7,0x6ED7,0x6EB4,0x6ECF,0x6E8F,0x6EC2,
0x6E9F,0x6F62,0x6F46,0x6F47,0x6F24,0x6F15,0x6EF9,0x6F2F,
0x6F36,0x6F4B,0x6F74,0x6F2A,0x6F09,0x6F29,0x6F89,0x6F8D,
0x6F8C,0x6F78,0x6F72,0x6F7C,0x6F7A,0x6FD1,0x6FC9,0x6FA7,
0x6FB9,0x6FB6,0x6FC2,0x6FE1,0x6FEE,0x6FDE,0x6FE0,0x6FEF,
0x701A,0x7023,0x701B,0x7039,0x7035,0x704F,0x705E,0x5B80,
0x5B84,0x5B95,0x5B93,0x5BA5,0x5BB8,0x752F,0x9A9E,0x6434,
0x5BE4,0x5BEE,0x8930,0x5BF0,0x8E47,0x8B07,0x8FB6,0x8FD3,
0x8FD5,0x8FE5,0x8FEE,0x8FE4,0x8FE9,0x8FE6,0x8FF3,0x8FE8,
0x9005,0x9004,0x900B,0x9026,0x9011,0x900D,0x9016,0x9021,
0x9035,0x9036,0x902D,0x902F,0x9044,0x9051,0x9052,0x9050,
0x9068,0x9058,0x9062,0x905B,0x66B9,0x9074,0x907D,0x9082,
0x9088,0x9083,0x908B,0x5F50,0x5F57,0x5F56,0x5F58,0x5C3B,
0x54AB,0x5C50,0x5C59,0x5B71,0x5C63,0x5C66,0x7FBC,0x5F2A,
0x5F29,0x5F2D,0x8274,0x5F3C,0x9B3B,0x5C6E,0x5981,0x5983,
0x598D,0x59A9,0x59AA,0x59A3,0x5997,0x59CA,0x59AB,0x599E,
0x59A4,0x59D2,0x59B2,0x59AF,0x59D7,0x59BE,0x5A05,0x5A06,
0x59DD,0x5A08,0x59E3,0x59D8,0x59F9,0x5A0C,0x5A09,0x5A32,
0x5A34,0x5A11,0x5A23,0x5A13,0x5A40,0x5A67,0x5A4A,0x5A55,
0x5A3C,0x5A62,0x5A75,0x80EC,0x5AAA,0x5A9B,0x5A77,0x5A7A,
0x5ABE,0x5AEB,0x5AB2,0x5AD2,0x5AD4,0x5AB8,0x5AE0,0x5AE3,
0x5AF1,0x5AD6,0x5AE6,0x5AD8,0x5ADC,0x5B09,0x5B17,0x5B16,
0x5B32,0x5B37,0x5B40,0x5C15,0x5C1C,0x5B5A,0x5B65,0x5B73,
0x5B51,0x5B53,0x5B62,0x9A75,0x9A77,0x9A78,0x9A7A,0x9A7F,
0x9A7D,0x9A80,0x9A81,0x9A85,0x9A88,0x9A8A,0x9A90,0x9A92,
0x9A93,0x9A96,0x9A98,0x9A9B,0x9A9C,0x9A9D,0x9A9F,0x9AA0,
0x9AA2,0x9AA3,0x9AA5,0x9AA7,0x7E9F,0x7EA1,0x7EA3,0x7EA5,
0x7EA8,0x7EA9,0x7EAD,0x7EB0,0x7EBE,0x7EC0,0x7EC1,0x7EC2,
0x7EC9,0x7ECB,0x7ECC,0x7ED0,0x7ED4,0x7ED7,0x7EDB,0x7EE0,
0x7EE1,0x7EE8,0x7EEB,0x7EEE,0x7EEF,0x7EF1,0x7EF2,0x7F0D,
0x7EF6,0x7EFA,0x7EFB,0x7EFE,0x7F01,0x7F02,0x7F03,0x7F07,
0x7F08,0x7F0B,0x7F0C,0x7F0F,0x7F11,0x7F12,0x7F17,0x7F19,
0x7F1C,0x7F1B,0x7F1F,0x7F21,0x7F22,0x7F23,0x7F24,0x7F25,
0x7F26,0x7F27,0x7F2A,0x7F2B,0x7F2C,0x7F2D,0x7F2F,0x7F30,
0x7F31,0x7F32,0x7F33,0x7F35,0x5E7A,0x757F,0x5DDB,0x753E,
0x9095,0x738E,0x7391,0x73AE,0x73A2,0x739F,0x73CF,0x73C2,
0x73D1,0x73B7,0x73B3,0x73C0,0x73C9,0x73C8,0x73E5,0x73D9,
0x987C,0x740A,0x73E9,0x73E7,0x73DE,0x73BA,0x73F2,0x740F,
0x742A,0x745B,0x7426,0x7425,0x7428,0x7430,0x742E,0x742C,
0x741B,0x741A,0x7441,0x745C,0x7457,0x7455,0x7459,0x7477,
0x746D,0x747E,0x749C,0x748E,0x7480,0x7481,0x7487,0x748B,
0x749E,0x74A8,0x74A9,0x7490,0x74A7,0x74D2,0x74BA,0x97EA,
0x97EB,0x97EC,0x674C,0x6753,0x675E,0x6748,0x6769,0x67A5,
0x6787,0x676A,0x6773,0x6798,0x67A7,0x6775,0x67A8,0x679E,
0x67AD,0x678B,0x6777,0x677C,0x67F0,0x6809,0x67D8,0x680A,
0x67E9,0x67B0,0x680C,0x67D9,0x67B5,0x67DA,0x67B3,0x67DD,
0x6800,0x67C3,0x67B8,0x67E2,0x680E,0x67C1,0x67FD,0x6832,
0x6833,0x6860,0x6861,0x684E,0x6862,0x6844,0x6864,0x6883,
0x681D,0x6855,0x6866,0x6841,0x6867,0x6840,0x683E,0x684A,
0x6849,0x6829,0x68B5,0x688F,0x6874,0x6877,0x6893,0x686B,
0x68C2,0x696E,0x68FC,0x691F,0x6920,0x68F9,0x6924,0x68F0,
0x690B,0x6901,0x6957,0x68E3,0x6910,0x6971,0x6939,0x6960,
0x6942,0x695D,0x6984,0x696B,0x6980,0x6998,0x6978,0x6934,
0x69CC,0x6987,0x6988,0x69CE,0x6989,0x6966,0x6963,0x6979,
0x699B,0x69A7,0x69BB,0x69AB,0x69AD,0x69D4,0x69B1,0x69C1,
0x69CA,0x69DF,0x6995,0x69E0,0x698D,0x69FF,0x6A2F,0x69ED,
0x6A17,0x6A18,0x6A65,0x69F2,0x6A44,0x6A3E,0x6AA0,0x6A50,
0x6A5B,0x6A35,0x6A8E,0x6A79,0x6A3D,0x6A28,0x6A58,0x6A7C,
0x6A91,0x6A90,0x6AA9,0x6A97,0x6AAB,0x7337,0x7352,0x6B81,
0x6B82,0x6B87,0x6B84,0x6B92,0x6B93,0x6B8D,0x6B9A,0x6B9B,
0x6BA1,0x6BAA,0x8F6B,0x8F6D,0x8F71,0x8F72,0x8F73,0x8F75,
0x8F76,0x8F78,0x8F77,0x8F79,0x8F7A,0x8F7C,0x8F7E,0x8F81,
0x8F82,0x8F84,0x8F87,0x8F8B,0x8F8D,0x8F8E,0x8F8F,0x8F98,
0x8F9A,0x8ECE,0x620B,0x6217,0x621B,0x621F,0x6222,0x6221,
0x6225,0x6224,0x622C,0x81E7,0x74EF,0x74F4,0x74FF,0x750F,
0x7511,0x7513,0x6534,0x65EE,0x65EF,0x65F0,0x660A,0x6619,
0x6772,0x6603,0x6615,0x6600,0x7085,0x66F7,0x661D,0x6634,
0x6631,0x6636,0x6635,0x8006,0x665F,0x6654,0x6641,0x664F,
0x6656,0x6661,0x6657,0x6677,0x6684,0x668C,0x66A7,0x669D,
0x66BE,0x66DB,0x66DC,0x66E6,0x66E9,0x8D32,0x8D33,0x8D36,
0x8D3B,0x8D3D,0x8D40,0x8D45,0x8D46,0x8D48,0x8D49,0x8D47,
0x8D4D,0x8D55,0x8D59,0x89C7,0x89CA,0x89CB,0x89CC,0x89CE,
0x89CF,0x89D0,0x89D1,0x726E,0x729F,0x725D,0x7266,0x726F,
0x727E,0x727F,0x7284,0x728B,0x728D,0x728F,0x7292,0x6308,
0x6332,0x63B0,0x643F,0x64D8,0x8004,0x6BEA,0x6BF3,0x6BFD,
0x6BF5,0x6BF9,0x6C05,0x6C07,0x6C06,0x6C0D,0x6C15,0x6C18,
0x6C19,0x6C1A,0x6C21,0x6C29,0x6C24,0x6C2A,0x6C32,0x6535,
0x6555,0x656B,0x724D,0x7252,0x7256,0x7230,0x8662,0x5216,
0x809F,0x809C,0x8093,0x80BC,0x670A,0x80BD,0x80B1,0x80AB,
0x80AD,0x80B4,0x80B7,0x80E7,0x80E8,0x80E9,0x80EA,0x80DB,
0x80C2,0x80C4,0x80D9,0x80CD,0x80D7,0x6710,0x80DD,0x80EB,
0x80F1,0x80F4,0x80ED,0x810D,0x810E,0x80F2,0x80FC,0x6715,
0x8112,0x8C5A,0x8136,0x811E,0x812C,0x8118,0x8132,0x8148,
0x814C,0x8153,0x8174,0x8159,0x815A,0x8171,0x8160,0x8169,
0x817C,0x817D,0x816D,0x8167,0x584D,0x5AB5,0x8188,0x8182,
0x8191,0x6ED5,0x81A3,0x81AA,0x81CC,0x6726,0x81CA,0x81BB,
0x81C1,0x81A6,0x6B24,0x6B37,0x6B39,0x6B43,0x6B46,0x6B59,
0x98D1,0x98D2,0x98D3,0x98D5,0x98D9,0x98DA,0x6BB3,0x5F40,
0x6BC2,0x89F3,0x6590,0x9F51,0x6593,0x65BC,0x65C6,0x65C4,
0x65C3,0x65CC,0x65CE,0x65D2,0x65D6,0x7080,0x709C,0x7096,
0x709D,0x70BB,0x70C0,0x70B7,0x70AB,0x70B1,0x70E8,0x70CA,
0x7110,0x7113,0x7116,0x712F,0x7131,0x7173,0x715C,0x7168,
0x7145,0x7172,0x714A,0x7178,0x717A,0x7198,0x71B3,0x71B5,
0x71A8,0x71A0,0x71E0,0x71D4,0x71E7,0x71F9,0x721D,0x7228,
0x706C,0x7118,0x7166,0x71B9,0x623E,0x623D,0x6243,0x6248,
0x6249,0x793B,0x7940,0x7946,0x7949,0x795B,0x795C,0x7953,
0x795A,0x7962,0x7957,0x7960,0x796F,0x7967,0x797A,0x7985,
0x798A,0x799A,0x79A7,0x79B3,0x5FD1,0x5FD0,0x603C,0x605D,
0x605A,0x6067,0x6041,0x6059,0x6063,0x60AB,0x6106,0x610D,
0x615D,0x61A9,0x619D,0x61CB,0x61D1,0x6206,0x8080,0x807F,
0x6C93,0x6CF6,0x6DFC,0x77F6,0x77F8,0x7800,0x7809,0x7817,
0x7818,0x7811,0x65AB,0x782D,0x781C,0x781D,0x7839,0x783A,
0x783B,0x781F,0x783C,0x7825,0x782C,0x7823,0x7829,0x784E,
0x786D,0x7856,0x7857,0x7826,0x7850,0x7847,0x784C,0x786A,
0x789B,0x7893,0x789A,0x7887,0x789C,0x78A1,0x78A3,0x78B2,
0x78B9,0x78A5,0x78D4,0x78D9,0x78C9,0x78EC,0x78F2,0x7905,
0x78F4,0x7913,0x7924,0x791E,0x7934,0x9F9B,0x9EF9,0x9EFB,
0x9EFC,0x76F1,0x7704,0x770D,0x76F9,0x7707,0x7708,0x771A,
0x7722,0x7719,0x772D,0x7726,0x7735,0x7738,0x7750,0x7751,
0x7747,0x7743,0x775A,0x7768,0x7762,0x7765,0x777F,0x778D,
0x777D,0x7780,0x778C,0x7791,0x779F,0x77A0,0x77B0,0x77B5,
0x77BD,0x753A,0x7540,0x754E,0x754B,0x7548,0x755B,0x7572,
0x7579,0x7583,0x7F58,0x7F61,0x7F5F,0x8A48,0x7F68,0x7F74,
0x7F71,0x7F79,0x7F81,0x7F7E,0x76CD,0x76E5,0x8832,0x9485,
0x9486,0x9487,0x948B,0x948A,0x948C,0x948D,0x948F,0x9490,
0x9494,0x9497,0x9495,0x949A,0x949B,0x949C,0x94A3,0x94A4,
0x94AB,0x94AA,0x94AD,0x94AC,0x94AF,0x94B0,0x94B2,0x94B4,
0x94B6,0x94B7,0x94B8,0x94B9,0x94BA,0x94BC,0x94BD,0x94BF,
0x94C4,0x94C8,0x94C9,0x94CA,0x94CB,0x94CC,0x94CD,0x94CE,
0x94D0,0x94D1,0x94D2,0x94D5,0x94D6,0x94D7,0x94D9,0x94D8,
0x94DB,0x94DE,0x94DF,0x94E0,0x94E2,0x94E4,0x94E5,0x94E7,
0x94E8,0x94EA,0x94E9,0x94EB,0x94EE,0x94EF,0x94F3,0x94F4,
0x94F5,0x94F7,0x94F9,0x94FC,0x94FD,0x94FF,0x9503,0x9502,
0x9506,0x9507,0x9509,0x950A,0x950D,0x950E,0x950F,0x9512,
0x9513,0x9514,0x9515,0x9516,0x9518,0x951B,0x951D,0x951E,
0x951F,0x9522,0x952A,0x952B,0x9529,0x952C,0x9531,0x9532,
0x9534,0x9536,0x9537,0x9538,0x953C,0x953E,0x953F,0x9542,
0x9535,0x9544,0x9545,0x9546,0x9549,0x954C,0x954E,0x954F,
0x9552,0x9553,0x9554,0x9556,0x9557,0x9558,0x9559,0x955B,
0x955E,0x955F,0x955D,0x9561,0x9562,0x9564,0x9565,0x9566,
0x9567,0x9568,0x9569,0x956A,0x956B,0x956C,0x956F,0x9571,
0x9572,0x9573,0x953A,0x77E7,0x77EC,0x96C9,0x79D5,0x79ED,
0x79E3,0x79EB,0x7A06,0x5D47,0x7A03,0x7A02,0x7A1E,0x7A14,
0x7A39,0x7A37,0x7A51,0x9ECF,0x99A5,0x7A70,0x7688,0x768E,
0x7693,0x7699,0x76A4,0x74DE,0x74E0,0x752C,0x9E20,0x9E22,
0x9E28,0x9E29,0x9E2A,0x9E2B,0x9E2C,0x9E32,0x9E31,0x9E36,
0x9E38,0x9E37,0x9E39,0x9E3A,0x9E3E,0x9E41,0x9E42,0x9E44,
0x9E46,0x9E47,0x9E48,0x9E49,0x9E4B,0x9E4C,0x9E4E,0x9E51,
0x9E55,0x9E57,0x9E5A,0x9E5B,0x9E5C,0x9E5E,0x9E63,0x9E66,
0x9E67,0x9E68,0x9E69,0x9E6A,0x9E6B,0x9E6C,0x9E71,0x9E6D,
0x9E73,0x7592,0x7594,0x7596,0x75A0,0x759D,0x75AC,0x75A3,
0x75B3,0x75B4,0x75B8,0x75C4,0x75B1,0x75B0,0x75C3,0x75C2,
0x75D6,0x75CD,0x75E3,0x75E8,0x75E6,0x75E4,0x75EB,0x75E7,
0x7603,0x75F1,0x75FC,0x75FF,0x7610,0x7600,0x7605,0x760C,
0x7617,0x760A,0x7625,0x7618,0x7615,0x7619,0x761B,0x763C,
0x7622,0x7620,0x7640,0x762D,0x7630,0x763F,0x7635,0x7643,
0x763E,0x7633,0x764D,0x765E,0x7654,0x765C,0x7656,0x766B,
0x766F,0x7FCA,0x7AE6,0x7A78,0x7A79,0x7A80,0x7A86,0x7A88,
0x7A95,0x7AA6,0x7AA0,0x7AAC,0x7AA8,0x7AAD,0x7AB3,0x8864,
0x8869,0x8872,0x887D,0x887F,0x8882,0x88A2,0x88C6,0x88B7,
0x88BC,0x88C9,0x88E2,0x88CE,0x88E3,0x88E5,0x88F1,0x891A,
0x88FC,0x88E8,0x88FE,0x88F0,0x8921,0x8919,0x8913,0x891B,
0x890A,0x8934,0x892B,0x8936,0x8941,0x8966,0x897B,0x758B,
0x80E5,0x76B2,0x76B4,0x77DC,0x8012,0x8014,0x8016,0x801C,
0x8020,0x8022,0x8025,0x8026,0x8027,0x8029,0x8028,0x8031,
0x800B,0x8035,0x8043,0x8046,0x804D,0x8052,0x8069,0x8071,
0x8983,0x9878,0x9880,0x9883,0x9889,0x988C,0x988D,0x988F,
0x9894,0x989A,0x989B,0x989E,0x989F,0x98A1,0x98A2,0x98A5,
0x98A6,0x864D,0x8654,0x866C,0x866E,0x867F,0x867A,0x867C,
0x867B,0x86A8,0x868D,0x868B,0x86AC,0x869D,0x86A7,0x86A3,
0x86AA,0x8693,0x86A9,0x86B6,0x86C4,0x86B5,0x86CE,0x86B0,
0x86BA,0x86B1,0x86AF,0x86C9,0x86CF,0x86B4,0x86E9,0x86F1,
0x86F2,0x86ED,0x86F3,0x86D0,0x8713,0x86DE,0x86F4,0x86DF,
0x86D8,0x86D1,0x8703,0x8707,0x86F8,0x8708,0x870A,0x870D,
0x8709,0x8723,0x873B,0x871E,0x8725,0x872E,0x871A,0x873E,
0x8748,0x8734,0x8731,0x8729,0x8737,0x873F,0x8782,0x8722,
0x877D,0x877E,0x877B,0x8760,0x8770,0x874C,0x876E,0x878B,
0x8753,0x8763,0x877C,0x8764,0x8759,0x8765,0x8793,0x87AF,
0x87A8,0x87D2,0x87C6,0x8788,0x8785,0x87AD,0x8797,0x8783,
0x87AB,0x87E5,0x87AC,0x87B5,0x87B3,0x87CB,0x87D3,0x87BD,
0x87D1,0x87C0,0x87CA,0x87DB,0x87EA,0x87E0,0x87EE,0x8816,
0x8813,0x87FE,0x880A,0x881B,0x8821,0x8839,0x883C,0x7F36,
0x7F42,0x7F44,0x7F45,0x8210,0x7AFA,0x7AFD,0x7B08,0x7B03,
0x7B04,0x7B15,0x7B0A,0x7B2B,0x7B0F,0x7B47,0x7B38,0x7B2A,
0x7B19,0x7B2E,0x7B31,0x7B20,0x7B25,0x7B24,0x7B33,0x7B3E,
0x7B1E,0x7B58,0x7B5A,0x7B45,0x7B75,0x7B4C,0x7B5D,0x7B60,
0x7B6E,0x7B7B,0x7B62,0x7B72,0x7B71,0x7B90,0x7BA6,0x7BA7,
0x7BB8,0x7BAC,0x7B9D,0x7BA8,0x7B85,0x7BAA,0x7B9C,0x7BA2,
0x7BAB,0x7BB4,0x7BD1,0x7BC1,0x7BCC,0x7BDD,0x7BDA,0x7BE5,
0x7BE6,0x7BEA,0x7C0C,0x7BFE,0x7BFC,0x7C0F,0x7C16,0x7C0B,
0x7C1F,0x7C2A,0x7C26,0x7C38,0x7C41,0x7C40,0x81FE,0x8201,
0x8202,0x8204,0x81EC,0x8844,0x8221,0x8222,0x8223,0x822D,
0x822F,0x8228,0x822B,0x8238,0x823B,0x8233,0x8234,0x823E,
0x8244,0x8249,0x824B,0x824F,0x825A,0x825F,0x8268,0x887E,
0x8885,0x8888,0x88D8,0x88DF,0x895E,0x7F9D,0x7F9F,0x7FA7,
0x7FAF,0x7FB0,0x7FB2,0x7C7C,0x6549,0x7C91,0x7C9D,0x7C9C,
0x7C9E,0x7CA2,0x7CB2,0x7CBC,0x7CBD,0x7CC1,0x7CC7,0x7CCC,
0x7CCD,0x7CC8,0x7CC5,0x7CD7,0x7CE8,0x826E,0x66A8,0x7FBF,
0x7FCE,0x7FD5,0x7FE5,0x7FE1,0x7FE6,0x7FE9,0x7FEE,0x7FF3,
0x7CF8,0x7D77,0x7DA6,0x7DAE,0x7E47,0x7E9B,0x9EB8,0x9EB4,
0x8D73,0x8D84,0x8D94,0x8D91,0x8DB1,0x8D67,0x8D6D,0x8C47,
0x8C49,0x914A,0x9150,0x914E,0x914F,0x9164,0x9162,0x9161,
0x9170,0x9169,0x916F,0x917D,0x917E,0x9172,0x9174,0x9179,
0x918C,0x9185,0x9190,0x918D,0x9191,0x91A2,0x91A3,0x91AA,
0x91AD,0x91AE,0x91AF,0x91B5,0x91B4,0x91BA,0x8C55,0x9E7E,
0x8DB8,0x8DEB,0x8E05,0x8E59,0x8E69,0x8DB5,0x8DBF,0x8DBC,
0x8DBA,0x8DC4,0x8DD6,0x8DD7,0x8DDA,0x8DDE,0x8DCE,0x8DCF,
0x8DDB,0x8DC6,0x8DEC,0x8DF7,0x8DF8,0x8DE3,0x8DF9,0x8DFB,
0x8DE4,0x8E09,0x8DFD,0x8E14,0x8E1D,0x8E1F,0x8E2C,0x8E2E,
0x8E23,0x8E2F,0x8E3A,0x8E40,0x8E39,0x8E35,0x8E3D,0x8E31,
0x8E49,0x8E41,0x8E42,0x8E51,0x8E52,0x8E4A,0x8E70,0x8E76,
0x8E7C,0x8E6F,0x8E74,0x8E85,0x8E8F,0x8E94,0x8E90,0x8E9C,
0x8E9E,0x8C78,0x8C82,0x8C8A,0x8C85,0x8C98,0x8C94,0x659B,
0x89D6,0x89DE,0x89DA,0x89DC,0x89E5,0x89EB,0x89EF,0x8A3E,
0x8B26,0x9753,0x96E9,0x96F3,0x96EF,0x9706,0x9701,0x9708,
0x970F,0x970E,0x972A,0x972D,0x9730,0x973E,0x9F80,0x9F83,
0x9F85,0x9F86,0x9F87,0x9F88,0x9F89,0x9F8A,0x9F8C,0x9EFE,
0x9F0B,0x9F0D,0x96B9,0x96BC,0x96BD,0x96CE,0x96D2,0x77BF,
0x96E0,0x928E,0x92AE,0x92C8,0x933E,0x936A,0x93CA,0x938F,
0x943E,0x946B,0x9C7F,0x9C82,0x9C85,0x9C86,0x9C87,0x9C88,
0x7A23,0x9C8B,0x9C8E,0x9C90,0x9C91,0x9C92,0x9C94,0x9C95,
0x9C9A,0x9C9B,0x9C9E,0x9C9F,0x9CA0,0x9CA1,0x9CA2,0x9CA3,
0x9CA5,0x9CA6,0x9CA7,0x9CA8,0x9CA9,0x9CAB,0x9CAD,0x9CAE,
0x9CB0,0x9CB1,0x9CB2,0x9CB3,0x9CB4,0x9CB5,0x9CB6,0x9CB7,
0x9CBA,0x9CBB,0x9CBC,0x9CBD,0x9CC4,0x9CC5,0x9CC6,0x9CC7,
0x9CCA,0x9CCB,0x9CCC,0x9CCD,0x9CCE,0x9CCF,0x9CD0,0x9CD3,
0x9CD4,0x9CD5,0x9CD7,0x9CD8,0x9CD9,0x9CDC,0x9CDD,0x9CDF,
0x9CE2,0x977C,0x9785,0x9791,0x9792,0x9794,0x97AF,0x97AB,
0x97A3,0x97B2,0x97B4,0x9AB1,0x9AB0,0x9AB7,0x9E58,0x9AB6,
0x9ABA,0x9ABC,0x9AC1,0x9AC0,0x9AC5,0x9AC2,0x9ACB,0x9ACC,
0x9AD1,0x9B45,0x9B43,0x9B47,0x9B49,0x9B48,0x9B4D,0x9B51,
0x98E8,0x990D,0x992E,0x9955,0x9954,0x9ADF,0x9AE1,0x9AE6,
0x9AEF,0x9AEB,0x9AFB,0x9AED,0x9AF9,0x9B08,0x9B0F,0x9B13,
0x9B1F,0x9B23,0x9EBD,0x9EBE,0x7E3B,0x9E82,0x9E87,0x9E88,
0x9E8B,0x9E92,0x93D6,0x9E9D,0x9E9F,0x9EDB,0x9EDC,0x9EDD,
0x9EE0,0x9EDF,0x9EE2,0x9EE9,0x9EE7,0x9EE5,0x9EEA,0x9EEF,
0x9F22,0x9F2C,0x9F2F,0x9F39,0x9F37,0x9F3D,0x9F3E,0x9F44
};
//#define B_DEBUG
int ConverGB2Unicode(char *szFrom,wchar_t *wszTo)
{
int i=0;
int j=0;
int k=0;
int size=strlen(szFrom);
unsigned char utemp=0;
for(i=0;i<size;i++)
{
utemp=(unsigned char)szFrom[i];
if(utemp<128)
{
wszTo[k]=szFrom[i];
k++;
}
else
{ j=szFrom[i]*0x100+(unsigned char)szFrom[i+1];
wszTo[k]=0x2000;
if (j>=0xA1A1 && j<=0xA9FE)
wszTo[k]=bGbUnicodedat1[(szFrom[i]-0xA1)*94+ (unsigned char)szFrom[i+1]-0xA1];
if (j>=0xB0A1 && j<=0xF7FE)
wszTo[k]=bGbUnicodedat2[(szFrom[i]-0xB0)*94+ (unsigned char)szFrom[i+1]-0xA1];
i++;
k++;
}
}
wszTo[k]=0;
return k;
}

View File

@ -1,24 +0,0 @@
//GB2Unicode.h
#ifndef GB2UNICODE_H_
#define GB2UNICODE_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
int ConverGB2Unicode(char *szFrom,wchar_t *wszTo);
#ifdef __cplusplus
}
#endif
#endif //GB2UNICODE_H_

View File

@ -1,331 +0,0 @@
#include <stdio.h>
#include <ogcsys.h>
#include <string.h>
#include "apploader.h"
#include "wdvd.h"
#include "wpad.h"
#include "patchcode.h"
#include "kenobiwii.h" /*FISHEARS*/
/*KENOBI! - FISHEARS*/
extern const unsigned char kenobiwii[];
extern const int kenobiwii_size;
/*KENOBI! - FISHEARS*/
/* Apploader function pointers */
typedef int (*app_main)(void **dst, int *size, int *offset);
typedef void (*app_init)(void (*report)(const char *fmt, ...));
typedef void *(*app_final)();
typedef void (*app_entry)(void (**init)(void (*report)(const char *fmt, ...)), int (**main)(), void *(**final)());
/* Apploader pointers */
static u8 *appldr = (u8 *)0x81200000;
/* Constants */
#define APPLDR_OFFSET 0x2440
/* Variables */
static u32 buffer[0x20] ATTRIBUTE_ALIGN(32);
static void __noprint(const char *fmt, ...)
{
}
bool compare_videomodes(GXRModeObj* mode1, GXRModeObj* mode2)
{
if (mode1->viTVMode != mode2->viTVMode || mode1->fbWidth != mode2->fbWidth || mode1->efbHeight != mode2->efbHeight || mode1->xfbHeight != mode2->xfbHeight ||
mode1->viXOrigin != mode2->viXOrigin || mode1->viYOrigin != mode2->viYOrigin || mode1->viWidth != mode2->viWidth || mode1->viHeight != mode2->viHeight ||
mode1->xfbMode != mode2->xfbMode || mode1->field_rendering != mode2->field_rendering || mode1->aa != mode2->aa || mode1->sample_pattern[0][0] != mode2->sample_pattern[0][0] ||
mode1->sample_pattern[1][0] != mode2->sample_pattern[1][0] || mode1->sample_pattern[2][0] != mode2->sample_pattern[2][0] ||
mode1->sample_pattern[3][0] != mode2->sample_pattern[3][0] || mode1->sample_pattern[4][0] != mode2->sample_pattern[4][0] ||
mode1->sample_pattern[5][0] != mode2->sample_pattern[5][0] || mode1->sample_pattern[6][0] != mode2->sample_pattern[6][0] ||
mode1->sample_pattern[7][0] != mode2->sample_pattern[7][0] || mode1->sample_pattern[8][0] != mode2->sample_pattern[8][0] ||
mode1->sample_pattern[9][0] != mode2->sample_pattern[9][0] || mode1->sample_pattern[10][0] != mode2->sample_pattern[10][0] ||
mode1->sample_pattern[11][0] != mode2->sample_pattern[11][0] || mode1->sample_pattern[0][1] != mode2->sample_pattern[0][1] ||
mode1->sample_pattern[1][1] != mode2->sample_pattern[1][1] || mode1->sample_pattern[2][1] != mode2->sample_pattern[2][1] ||
mode1->sample_pattern[3][1] != mode2->sample_pattern[3][1] || mode1->sample_pattern[4][1] != mode2->sample_pattern[4][1] ||
mode1->sample_pattern[5][1] != mode2->sample_pattern[5][1] || mode1->sample_pattern[6][1] != mode2->sample_pattern[6][1] ||
mode1->sample_pattern[7][1] != mode2->sample_pattern[7][1] || mode1->sample_pattern[8][1] != mode2->sample_pattern[8][1] ||
mode1->sample_pattern[9][1] != mode2->sample_pattern[9][1] || mode1->sample_pattern[10][1] != mode2->sample_pattern[10][1] ||
mode1->sample_pattern[11][1] != mode2->sample_pattern[11][1] || mode1->vfilter[0] != mode2->vfilter[0] ||
mode1->vfilter[1] != mode2->vfilter[1] || mode1->vfilter[2] != mode2->vfilter[2] || mode1->vfilter[3] != mode2->vfilter[3] || mode1->vfilter[4] != mode2->vfilter[4] ||
mode1->vfilter[5] != mode2->vfilter[5] || mode1->vfilter[6] != mode2->vfilter[6] )
{
return false;
} else
{
return true;
}
}
void patch_videomode(GXRModeObj* mode1, GXRModeObj* mode2)
{
mode1->viTVMode = mode2->viTVMode;
mode1->fbWidth = mode2->fbWidth;
mode1->efbHeight = mode2->efbHeight;
mode1->xfbHeight = mode2->xfbHeight;
mode1->viXOrigin = mode2->viXOrigin;
mode1->viYOrigin = mode2->viYOrigin;
mode1->viWidth = mode2->viWidth;
mode1->viHeight = mode2->viHeight;
mode1->xfbMode = mode2->xfbMode;
mode1->field_rendering = mode2->field_rendering;
mode1->aa = mode2->aa;
mode1->sample_pattern[0][0] = mode2->sample_pattern[0][0];
mode1->sample_pattern[1][0] = mode2->sample_pattern[1][0];
mode1->sample_pattern[2][0] = mode2->sample_pattern[2][0];
mode1->sample_pattern[3][0] = mode2->sample_pattern[3][0];
mode1->sample_pattern[4][0] = mode2->sample_pattern[4][0];
mode1->sample_pattern[5][0] = mode2->sample_pattern[5][0];
mode1->sample_pattern[6][0] = mode2->sample_pattern[6][0];
mode1->sample_pattern[7][0] = mode2->sample_pattern[7][0];
mode1->sample_pattern[8][0] = mode2->sample_pattern[8][0];
mode1->sample_pattern[9][0] = mode2->sample_pattern[9][0];
mode1->sample_pattern[10][0] = mode2->sample_pattern[10][0];
mode1->sample_pattern[11][0] = mode2->sample_pattern[11][0];
mode1->sample_pattern[0][1] = mode2->sample_pattern[0][1];
mode1->sample_pattern[1][1] = mode2->sample_pattern[1][1];
mode1->sample_pattern[2][1] = mode2->sample_pattern[2][1];
mode1->sample_pattern[3][1] = mode2->sample_pattern[3][1];
mode1->sample_pattern[4][1] = mode2->sample_pattern[4][1];
mode1->sample_pattern[5][1] = mode2->sample_pattern[5][1];
mode1->sample_pattern[6][1] = mode2->sample_pattern[6][1];
mode1->sample_pattern[7][1] = mode2->sample_pattern[7][1];
mode1->sample_pattern[8][1] = mode2->sample_pattern[8][1];
mode1->sample_pattern[9][1] = mode2->sample_pattern[9][1];
mode1->sample_pattern[10][1] = mode2->sample_pattern[10][1];
mode1->sample_pattern[11][1] = mode2->sample_pattern[11][1];
mode1->vfilter[0] = mode2->vfilter[0];
mode1->vfilter[1] = mode2->vfilter[1];
mode1->vfilter[2] = mode2->vfilter[2];
mode1->vfilter[3] = mode2->vfilter[3];
mode1->vfilter[4] = mode2->vfilter[4];
mode1->vfilter[5] = mode2->vfilter[5];
mode1->vfilter[6] = mode2->vfilter[6];
}
GXRModeObj* vmodes[] = {
&TVNtsc240Ds,
&TVNtsc240DsAa,
&TVNtsc240Int,
&TVNtsc240IntAa,
&TVNtsc480IntDf,
&TVNtsc480IntAa,
&TVNtsc480Prog,
&TVMpal480IntDf,
&TVPal264Ds,
&TVPal264DsAa,
&TVPal264Int,
&TVPal264IntAa,
&TVPal524IntAa,
&TVPal528Int,
&TVPal528IntDf,
&TVPal574IntDfScale,
&TVEurgb60Hz240Ds,
&TVEurgb60Hz240DsAa,
&TVEurgb60Hz240Int,
&TVEurgb60Hz240IntAa,
&TVEurgb60Hz480Int,
&TVEurgb60Hz480IntDf,
&TVEurgb60Hz480IntAa,
&TVEurgb60Hz480Prog,
&TVEurgb60Hz480ProgSoft,
&TVEurgb60Hz480ProgAa
};
GXRModeObj* PAL2NTSC[]={
&TVMpal480IntDf, &TVNtsc480IntDf,
&TVPal264Ds, &TVNtsc240Ds,
&TVPal264DsAa, &TVNtsc240DsAa,
&TVPal264Int, &TVNtsc240Int,
&TVPal264IntAa, &TVNtsc240IntAa,
&TVPal524IntAa, &TVNtsc480IntAa,
&TVPal528Int, &TVNtsc480IntAa,
&TVPal528IntDf, &TVNtsc480IntDf,
&TVPal574IntDfScale, &TVNtsc480IntDf,
&TVEurgb60Hz240Ds, &TVNtsc240Ds,
&TVEurgb60Hz240DsAa, &TVNtsc240DsAa,
&TVEurgb60Hz240Int, &TVNtsc240Int,
&TVEurgb60Hz240IntAa, &TVNtsc240IntAa,
&TVEurgb60Hz480Int, &TVNtsc480IntAa,
&TVEurgb60Hz480IntDf, &TVNtsc480IntDf,
&TVEurgb60Hz480IntAa, &TVNtsc480IntAa,
&TVEurgb60Hz480Prog, &TVNtsc480Prog,
&TVEurgb60Hz480ProgSoft,&TVNtsc480Prog,
&TVEurgb60Hz480ProgAa, &TVNtsc480Prog,
0,0
};
GXRModeObj* NTSC2PAL[]={
&TVNtsc240Ds, &TVPal264Ds,
&TVNtsc240DsAa, &TVPal264DsAa,
&TVNtsc240Int, &TVPal264Int,
&TVNtsc240IntAa, &TVPal264IntAa,
&TVNtsc480IntDf, &TVPal528IntDf,
&TVNtsc480IntAa, &TVPal524IntAa,
&TVNtsc480Prog, &TVPal528IntDf,
0,0
};
GXRModeObj* NTSC2PAL60[]={
&TVNtsc240Ds, &TVEurgb60Hz240Ds,
&TVNtsc240DsAa, &TVEurgb60Hz240DsAa,
&TVNtsc240Int, &TVEurgb60Hz240Int,
&TVNtsc240IntAa, &TVEurgb60Hz240IntAa,
&TVNtsc480IntDf, &TVEurgb60Hz480IntDf,
&TVNtsc480IntAa, &TVEurgb60Hz480IntAa,
&TVNtsc480Prog, &TVEurgb60Hz480Prog,
0,0
};
bool Search_and_patch_Video_Modes(void *Address, u32 Size, GXRModeObj* Table[])
{
u8 *Addr = (u8 *)Address;
bool found = 0;
u32 i;
while(Size >= sizeof(GXRModeObj))
{
for(i = 0; Table[i]; i+=2)
{
if(compare_videomodes(Table[i], (GXRModeObj*)Addr))
{
found = 1;
patch_videomode((GXRModeObj*)Addr, Table[i+1]);
Addr += (sizeof(GXRModeObj)-4);
Size -= (sizeof(GXRModeObj)-4);
break;
}
}
Addr += 4;
Size -= 4;
}
return found;
}
s32 Apploader_Run(entry_point *entry, u8 cheat, u8 videoSelected, u8 vipatch, u8 patchcountrystring)
{
app_entry appldr_entry;
app_init appldr_init;
app_main appldr_main;
app_final appldr_final;
u32 appldr_len;
s32 ret;
/* Read apploader header */
ret = WDVD_Read(buffer, 0x20, APPLDR_OFFSET);
if (ret < 0)
return ret;
/* Calculate apploader length */
appldr_len = buffer[5] + buffer[6];
/* Read apploader code */
ret = WDVD_Read(appldr, appldr_len, APPLDR_OFFSET + 0x20);
if (ret < 0)
return ret;
/* Set apploader entry function */
appldr_entry = (app_entry)buffer[4];
/* Call apploader entry */
appldr_entry(&appldr_init, &appldr_main, &appldr_final);
/* Initialize apploader */
appldr_init(__noprint);
if (cheat)
{
/*HOOKS STUFF - FISHEARS*/
memset((void*)0x80001800,0,kenobiwii_size);
memcpy((void*)0x80001800,kenobiwii,kenobiwii_size);
DCFlushRange((void*)0x80001800,kenobiwii_size);
hooktype = 1;
memcpy((void*)0x80001800, (char*)0x80000000, 6); // For WiiRD
/*HOOKS STUFF - FISHEARS*/
}
for (;;) {
void *dst = NULL;
int len = 0, offset = 0;
GXRModeObj** table = NULL;
/* Run apploader main function */
ret = appldr_main(&dst, &len, &offset);
if (!ret)
break;
/* Read data from DVD */
WDVD_Read(dst, len, (u64)(offset << 2));
if (videoSelected == 5) // patch
{
switch(CONF_GetVideo())
{
case CONF_VIDEO_PAL:
if(CONF_GetEuRGB60() > 0)
{
table = NTSC2PAL60;
}
else
{
table = NTSC2PAL;
}
break;
case CONF_VIDEO_MPAL:
table = NTSC2PAL;
break;
default:
table = PAL2NTSC;
break;
}
Search_and_patch_Video_Modes(dst, len, table);
}
/*GAME HOOK - FISHEARS*/
dogamehooks(dst,len);
if (vipatch)
vidolpatcher(dst,len);
/*LANGUAGE PATCH - FISHEARS*/
langpatcher(dst,len);
/*Thanks to WiiPower*/
if(patchcountrystring == 1)
PatchCountryStrings(dst, len);
DCFlushRange(dst, len);
}
/* Set entry point from apploader */
*entry = appldr_final();
return 0;
}
#ifdef __cplusplus
}
#endif

View File

@ -1,10 +0,0 @@
#ifndef _APPLOADER_H_
#define _APPLOADER_H_
/* Entry point */
typedef void (*entry_point)(void);
/* Prototypes */
s32 Apploader_Run(entry_point *, u8, u8, u8, u8);
#endif

View File

@ -1,35 +0,0 @@
/****************************************************************************
* libwiigui Template
* Tantric 2009
*
* audio.cpp
* Audio support
***************************************************************************/
#include <gccore.h>
#include <ogcsys.h>
#include <asndlib.h>
/****************************************************************************
* InitAudio
*
* Initializes the Wii's audio subsystem
***************************************************************************/
void InitAudio()
{
AUDIO_Init(NULL);
ASND_Init();
ASND_Pause(0);
}
/****************************************************************************
* ShutdownAudio
*
* Shuts down audio subsystem. Useful to avoid unpleasant sounds if a
* crash occurs during shutdown.
***************************************************************************/
void ShutdownAudio()
{
ASND_Pause(1);
ASND_End();
}

View File

@ -1,15 +0,0 @@
/****************************************************************************
* libwiigui Template
* Tantric 2009
*
* audio.h
* Audio support
***************************************************************************/
#ifndef _AUDIO_H_
#define _AUDIO_H_
void InitAudio();
void ShutdownAudio();
#endif

75
source/background_image.c Normal file
View File

@ -0,0 +1,75 @@
#include <malloc.h>
#include "pngu.h"
#include "video.h"
#include "filelist.h"
extern int screenwidth;
extern int screenheight;
static int imagewidth = 0;
static int imageheight = 0;
u8 * GetImageData()
{
PNGUPROP imgProp;
IMGCTX ctx;
u8 * data = NULL;
int ret;
if(CONF_GetAspectRatio() == CONF_ASPECT_16_9)
ctx = PNGU_SelectImageFromBuffer(background169_png);
else
ctx = PNGU_SelectImageFromBuffer(background_png);
if (!ctx)
return NULL;
ret = PNGU_GetImageProperties(ctx, &imgProp);
if (ret != PNGU_OK)
return NULL;
imagewidth = imgProp.imgWidth;
imageheight = imgProp.imgHeight;
int len = ((((imgProp.imgWidth+3)>>2)*((imgProp.imgHeight+3)>>2)*32*2) + 31) & ~31;
data = (u8 *)memalign (32, len);
ret = PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255);
DCFlushRange(data, len);
PNGU_ReleaseImageContext(ctx);
return data;
}
void Background_Show(float x, float y, float z, u8 * data, float angle, float scaleX, float scaleY, u8 alpha)
{
/* Draw image */
Menu_DrawImg(x, y, z, imagewidth, imageheight, data, angle, scaleX, scaleY, alpha);
Menu_Render();
}
void fadein(u8 * imgdata)
{
int i;
/* fadein of image */
for(i = 0; i < 255; i = i+10)
{
if(i>255) i = 255;
Background_Show(screenwidth/2-imagewidth/2, screenheight/2-imageheight/2, 0, imgdata, 0, (float)screenwidth/(float)imagewidth, 1, i);
}
}
void fadeout(u8 * imgdata)
{
int i;
/* fadeoout of image */
for(i = 255; i > 1; i = i-7)
{
if(i < 0) i = 0;
Background_Show(screenwidth/2-imagewidth/2, screenheight/2-imageheight/2, 0, imgdata, 0, (float)screenwidth/(float)imagewidth, 1, i);
}
}

View File

@ -0,0 +1,9 @@
#ifndef BACKGROUND_IMAGE_H_
#define BACKGROUND_IMAGE_H_
u8 * GetImageData();
void Background_Show(float x, float y, float z, u8 * data, float angle, float scaleX, float scaleY, u8 alpha);
void fadein(u8 * imgdata);
void fadeout(u8 * imgdata);
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,359 +1,15 @@
#ifndef _CFG_H_
#define _CFG_H_
#include <gctypes.h>
#include "disc.h"
#ifdef __cplusplus
extern "C"
{
#endif
#define CFG_HOME_REBOOT 0
#define CFG_HOME_EXIT 1
#define CFG_VIDEO_SYS 0 // system default
#define CFG_VIDEO_DEFAULT 1
#define CFG_VIDEO_GAME 1 // game default
#define CFG_VIDEO_PATCH 2 // patch mode
#define CFG_VIDEO_PAL50 3 // force PAL
#define CFG_VIDEO_PAL60 4 // force PAL60
#define CFG_VIDEO_NTSC 5 // force NTSC
#define CFG_VIDEO_COUNT 6
#define CFG_LANG_CONSOLE 0
#define CFG_LANG_JAPANESE 1
#define CFG_LANG_ENGLISH 2
#define CFG_LANG_GERMAN 3
#define CFG_LANG_FRENCH 4
#define CFG_LANG_SPANISH 5
#define CFG_LANG_ITALIAN 6
#define CFG_LANG_DUTCH 7
#define CFG_LANG_S_CHINESE 8
#define CFG_LANG_T_CHINESE 9
#define CFG_LANG_KOREAN 10
#define CFG_LANG_COUNT 11
#define CFG_ALIGN_LEFT 0
#define CFG_ALIGN_RIGHT 1
#define CFG_ALIGN_CENTRE 2
#define CFG_ALIGN_TOP 3
#define CFG_ALIGN_BOTTOM 4
#define CFG_ALIGN_MIDDLE 5
extern char *cfg_path;
//extern char *cfg_images_path;
struct CFG
{
// char *background;
// short covers;
// short simple;
// short video;
// short language;
// short ocarina;
// short vipatch;
// short home;
// short download;
// short installdownload;
// short hidesettingmenu;
// short savesettings;
short widescreen;
short parentalcontrol;
// short maxcharacters;
short godmode;
short xflip;
short wsprompt;
char unlockCode[20];
char covers_path[100];
char theme_path[100];
char disc_path[100];
char titlestxt_path[100];
char language_path[100];
char oggload_path[100];
char ogg_path[150];
char update_path[150];
short keyset;
};
struct THEME
{
int selection_x;
int selection_y;
int selection_w;
int selection_h;
short cover_x;
short cover_y;
short showID;
// short maxcharacters;
short batteryUnused;
short id_x;
short id_y;
short region_x;
short region_y;
short power_x;
short power_y;
short home_x;
short home_y;
short battery1_x;
short battery2_x;
short battery3_x;
short battery4_x;
short battery1_y;
short battery2_y;
short battery3_y;
short battery4_y;
short favorite_x;
short favorite_y;
short abc_x;
short abc_y;
short list_x;
short list_y;
short grid_x;
short grid_y;
short carousel_x;
short carousel_y;
short count_x;
short count_y;
short sortBarOffset;
// short showPower;
// short showHome;
short setting_x;
short setting_y;
short install_x;
short install_y;
short showHDD;
short hddInfoAlign;
short hddInfo_x;
short hddInfo_y;
short showGameCnt;
short gameCntAlign;
short gameCnt_x;
short gameCnt_y;
short showRegion;
short showBattery;
short showToolTip;
//color
short info_r;
short info_g;
short info_b;
short prompttxt_r;
short prompttxt_g;
short prompttxt_b;
short clock_x;
short clock_y;
short clockAlign;
short sdcard_x;
short sdcard_y;
short gameText_r;
short gameText_g;
short gameText_b;
short pagesize;
};
extern struct CFG CFG;
extern struct THEME THEME;
extern u8 ocarinaChoice;
extern u16 playcnt;
extern u8 videoChoice;
extern u8 languageChoice;
extern u8 viChoice;
extern u8 iosChoice;
extern u8 faveChoice;
extern u8 parentalcontrolChoice;
extern u8 xflip;
extern u8 qboot;
extern u8 sort;
extern u8 fave;
extern u8 wsprompt;
extern u8 keyset;
extern u8 gameDisplay;
struct Game_CFG
{
u8 id[8];
u8 video;
u8 language;
u8 ocarina;
u8 vipatch;
u8 ios;
u8 parentalcontrol;
};
struct Game_NUM
{
u8 id[8];
u8 favorite;
u16 count;
};
void CFG_Default(int widescreen); // -1 = non forced mode
void CFG_Load(void);
void lang_defualt();
struct Game_CFG* CFG_get_game_opt(u8 *id);
struct Game_NUM* CFG_get_game_num(u8 *id);
bool CFG_save_game_opt(u8 *id);
bool CFG_save_game_num(u8 *id);
bool CFG_forget_game_opt(u8 *id);
int subfoldercheck(char * directory);
//Astidof - Begin of modification
enum {
ConsoleLangDefault=0,
jap,
eng,
ger,
fren,
esp,
it,
dut,
schin,
tchin,
kor,
settings_language_max // always the last entry
};
enum {
systemdefault=0,
discdefault,
patch,
pal50,
pal60,
ntsc,
settings_video_max // always the last entry
};
enum {
off=0,
on,
settings_off_on_max // always the last entry
};
enum {
GameID,
GameRegion,
Both,
Neither,
settings_sinfo_max // always the last entry
};
enum {
i249=0,
i222,
};
enum {
ios249=0,
ios222,
settings_cios_max // always the last entry
};
enum {
hr12=0,
hr24,
Off,
settings_clock_max // always the last entry
};
enum {
all=0,
pcount,
};
enum {
RumbleOff=0,
RumbleOn,
settings_rumble_max // always the last entry
};
enum {
TooltipsOff=0,
TooltipsOn,
settings_tooltips_max // always the last entry
};
enum {
v10=0,
v20,
v30,
v40,
v50,
v60,
v70,
v80,
v90,
v100,
v0,
settings_volume_max // always the last entry
};
enum {
no=0,
yes,
sysmenu,
wtf,
disk3d,
settings_xflip_max // always the last entry
};
enum {
us=0,
dvorak,
euro,
azerty,
settings_keyset_max // always the last entry
};
enum {
list,
grid,
carousel,
};
enum {
scrollDefault,
scrollMarquee,
settings_scrolleffect_max // always the last entry
};
struct SSettings {
int video;
int language;
int ocarina;
int vpatch;
int ios;
int sinfo;
int hddinfo;
int rumble;
int xflip;
int volume;
int tooltips;
char unlockCode[20];
int parentalcontrol;
int cios;
int qboot;
int wsprompt;
int keyset;
int unicodefix;
int sort;
int fave;
int wiilight;
int gameDisplay;
int patchcountrystrings;
};
void CFG_LoadGlobal(void);
bool cfg_save_global(void);
//Astidof - End of modification
char *get_title(struct discHdr *header);
u8 get_block(struct discHdr *header);
void CFG_Cleanup(void);
#ifdef __cplusplus
}
#endif
#endif
#ifndef _CFG_H_
#define _CFG_H_
#ifdef __cplusplus
extern "C"
{
#endif
bool cfg_parsefile(char * fname, int maxsize);
#ifdef __cplusplus
}
#endif
#endif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

134
source/devicemounter.c Normal file
View File

@ -0,0 +1,134 @@
#include <gccore.h>
#include <ogc/mutex.h>
#include <ogc/system.h>
#include <ogc/usbstorage.h>
#include <ogc/lwp_watchdog.h>
#include <malloc.h>
#include <string.h>
#include <stdio.h>
#include <fat.h>
#include <ntfs.h>
#include <ext2.h>
#include <sdcard/wiisd_io.h>
#include <unistd.h>
#include <time.h>
#include "devicemounter.h"
#define MAX_SECTOR_SIZE 4096
//these are the only stable and speed is good
#define CACHE 8
#define SECTORS 64
typedef struct _PARTITION_RECORD {
u8 status; /* Partition status; see above */
u8 chs_start[3]; /* Cylinder-head-sector address to first block of partition */
u8 type; /* Partition type; see above */
u8 chs_end[3]; /* Cylinder-head-sector address to last block of partition */
u32 lba_start; /* Local block address to first sector of partition */
u32 block_count; /* Number of blocks in partition */
} __attribute__((__packed__)) PARTITION_RECORD;
typedef struct _MASTER_BOOT_RECORD {
u8 code_area[446]; /* Code area; normally empty */
PARTITION_RECORD partitions[4]; /* 4 primary partitions */
u16 signature; /* MBR signature; 0xAA55 */
} __attribute__((__packed__)) MASTER_BOOT_RECORD;
#define PARTITION_TYPE_LINUX 0x83
#define le32(i) (((((u32) i) & 0xFF) << 24) | ((((u32) i) & 0xFF00) << 8) | \
((((u32) i) & 0xFF0000) >> 8) | ((((u32) i) & 0xFF000000) >> 24))
int USBDevice_Init()
{
time_t start = time(0);
while(time(0)-start < 10) // 10 sec
{
if(__io_usbstorage.startup() && __io_usbstorage.isInserted())
break;
usleep(200000); // 1/5 sec
}
if(!__io_usbstorage.startup() || !__io_usbstorage.isInserted())
return -1;
int i;
MASTER_BOOT_RECORD *mbr = (MASTER_BOOT_RECORD *) malloc(MAX_SECTOR_SIZE);
char *BootSector = (char *) malloc(MAX_SECTOR_SIZE);
if(!mbr || !BootSector)
return -1;
__io_usbstorage.readSectors(0, 1, mbr);
for(i = 0; i < 4; ++i)
{
if(mbr->partitions[i].type == 0)
continue;
__io_usbstorage.readSectors(le32(mbr->partitions[i].lba_start), 1, BootSector);
if(*((u16 *) (BootSector + 0x1FE)) == 0x55AA)
{
//! Partition typ can be missleading the correct partition format. Stupid lazy ass Partition Editors.
if(memcmp(BootSector + 0x36, "FAT", 3) == 0 || memcmp(BootSector + 0x52, "FAT", 3) == 0)
{
fatMount(DeviceName[USB1+i], &__io_usbstorage, le32(mbr->partitions[i].lba_start), CACHE, SECTORS);
}
else if (memcmp(BootSector + 0x03, "NTFS", 4) == 0)
{
ntfsMount(DeviceName[USB1+i], &__io_usbstorage, le32(mbr->partitions[i].lba_start), CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER | NTFS_IGNORE_CASE);
}
}
else if(mbr->partitions[i].type == PARTITION_TYPE_LINUX)
{
ext2Mount(DeviceName[USB1+i], &__io_usbstorage, le32(mbr->partitions[i].lba_start), CACHE, SECTORS, EXT2_FLAG_DEFAULT);
}
}
free(mbr);
free(BootSector);
return -1;
}
void USBDevice_deInit()
{
int dev;
char Name[20];
for(dev = USB1; dev <= USB4; ++dev)
{
sprintf(Name, "%s:/", DeviceName[dev]);
fatUnmount(Name);
ext2Unmount(Name);
ntfsUnmount(Name, true);
}
//Let's not shutdown so it stays awake for the application
__io_usbstorage.shutdown();
USB_Deinitialize();
}
int SDCard_Init()
{
if(!__io_wiisd.startup() || !__io_wiisd.isInserted())
return -1;
if (fatMount(DeviceName[SD], &__io_wiisd, 0, CACHE, SECTORS))
return 1;
return -1;
}
void SDCard_deInit()
{
char Name[20];
sprintf(Name, "%s:/", DeviceName[SD]);
//closing all open Files write back the cache and then shutdown em!
fatUnmount(Name);
//Let's not shutdown so it stays awake for the application
__io_wiisd.shutdown();
}

View File

@ -1,19 +1,37 @@
#ifndef _FATMOUNTER_H_
#define _FATMOUNTER_H_
#ifdef __cplusplus
extern "C"
{
#endif
int USBDevice_Init();
void USBDevice_deInit();
int isSdInserted();
int SDCard_Init();
void SDCard_deInit();
#ifdef __cplusplus
}
#endif
#endif
#ifndef _FATMOUNTER_H_
#define _FATMOUNTER_H_
#ifdef __cplusplus
extern "C"
{
#endif
enum
{
SD = 0,
USB1,
USB2,
USB3,
USB4,
MAXDEVICES
};
static const char DeviceName[MAXDEVICES][6] =
{
"sd",
"usb1",
"usb2",
"usb3",
"usb4"
};
int USBDevice_Init();
void USBDevice_deInit();
int SDCard_Init();
void SDCard_deInit();
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,390 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ogcsys.h>
#include <ogc/lwp_watchdog.h>
#include <wiiuse/wpad.h>
#include "apploader.h"
#include "disc.h"
#include "video.h"
#include "wdvd.h"
#include "fst.h"
/* Constants */
#define PTABLE_OFFSET 0x40000
#define WII_MAGIC 0x5D1C9EA3
/* Disc pointers */
static u32 *buffer = (u32 *)0x93000000;
static u8 *diskid = (u8 *)0x80000000;
static char gameid[8];
void __Disc_SetLowMem(void)
{
/* Setup low memory */
*(vu32 *)0x80000030 = 0x00000000;
*(vu32 *)0x80000060 = 0x38A00040;
*(vu32 *)0x800000E4 = 0x80431A80;
*(vu32 *)0x800000EC = 0x81800000;
*(vu32 *)0x800000F4 = 0x817E5480;
*(vu32 *)0x800000F8 = 0x0E7BE2C0;
*(vu32 *)0x800000FC = 0x2B73A840;
/* Copy disc ID */
memcpy((void *)0x80003180, (void *)0x80000000, 4);
/* Flush cache */
DCFlushRange((void *)0x80000000, 0x3F00);
}
void __Disc_SetVMode(u8 videoselected)
{
GXRModeObj *vmode = NULL;
u32 progressive, tvmode, vmode_reg = 0;
/* Get video mode configuration */
progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable();
tvmode = CONF_GetVideo();
/* Select video mode register */
switch (tvmode) {
case CONF_VIDEO_PAL:
vmode_reg = (CONF_GetEuRGB60() > 0) ? 5 : 1;
break;
case CONF_VIDEO_MPAL:
vmode_reg = 4;
break;
case CONF_VIDEO_NTSC:
vmode_reg = 0;
break;
}
switch (videoselected) {
case 0:
/* Select video mode */
switch(diskid[3]) {
/* PAL */
case 'D':
case 'F':
case 'P':
case 'X':
case 'Y':
if (tvmode != CONF_VIDEO_PAL) {
vmode_reg = 5;
vmode = (progressive) ? &TVNtsc480Prog : &TVEurgb60Hz480IntDf;
}
break;
/* NTSC or unknown */
case 'E':
case 'J':
if (tvmode != CONF_VIDEO_NTSC) {
vmode_reg = 0;
vmode = (progressive) ? &TVNtsc480Prog : &TVNtsc480IntDf;
}
break;
}
break;
case 1:
vmode_reg = 1;
progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable();
vmode = (progressive) ? &TVEurgb60Hz480Prog : &TVPal528IntDf;
break;
case 2:
vmode_reg = 5;
progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable();
vmode = (progressive) ? &TVEurgb60Hz480Prog : &TVEurgb60Hz480IntDf;
break;
case 3:
vmode_reg = 0;
progressive = (CONF_GetProgressiveScan() > 0) && VIDEO_HaveComponentCable();
vmode = (progressive) ? &TVNtsc480Prog : &TVNtsc480IntDf;
break;
case 4:
// vmode = VIDEO_GetPreferredMode(NULL);
break;
}
/* Set video mode register */
*(vu32 *)0x800000CC = vmode_reg;
/* Set video mode */
if (vmode) {
VIDEO_Configure(vmode);
/* Setup video */
VIDEO_SetBlack(FALSE);
VIDEO_Flush();
VIDEO_WaitVSync();
if (vmode->viTVMode & VI_NON_INTERLACE)
VIDEO_WaitVSync();
}
}
void __Disc_SetTime(void)
{
/* Extern */
extern void settime(u64);
/* Set proper time */
settime(secs_to_ticks(time(NULL) - 946684800));
}
s32 __Disc_FindPartition(u64 *outbuf)
{
u64 offset = 0, table_offset = 0;
u32 cnt, nb_partitions;
s32 ret;
/* Read partition info */
ret = WDVD_UnencryptedRead(buffer, 0x20, PTABLE_OFFSET);
if (ret < 0)
return ret;
/* Get data */
nb_partitions = buffer[0];
table_offset = buffer[1] << 2;
/* Read partition table */
ret = WDVD_UnencryptedRead(buffer, 0x20, table_offset);
if (ret < 0)
return ret;
/* Find game partition */
for (cnt = 0; cnt < nb_partitions; cnt++) {
u32 type = buffer[cnt * 2 + 1];
/* Game partition */
if(!type)
offset = buffer[cnt * 2] << 2;
}
/* No game partition found */
if (!offset)
return -1;
/* Set output buffer */
*outbuf = offset;
return 0;
}
s32 Disc_Init(void)
{
/* Init DVD subsystem */
return WDVD_Init();
}
s32 Disc_Open(void)
{
s32 ret;
/* Reset drive */
ret = WDVD_Reset();
if (ret < 0)
return ret;
/* Read disc ID */
return WDVD_ReadDiskId(diskid);
}
s32 Disc_Wait(void)
{
u32 cover = 0;
s32 ret;
/* Wait for disc */
while (!(cover & 0x2)) {
/* Get cover status */
ret = WDVD_GetCoverStatus(&cover);
if (ret < 0)
return ret;
}
return 0;
}
s32 Disc_SetUSB(u8 *id, int ios222)
{
/* Set USB mode */
return WDVD_SetUSBMode(id, ios222);
}
s32 Disc_ReadHeader(void *outbuf)
{
/* Read disc header */
return WDVD_UnencryptedRead(outbuf, sizeof(struct discHdr), 0);
}
s32 Disc_IsWii(void)
{
struct discHdr *header = (struct discHdr *)buffer;
s32 ret;
/* Read disc header */
ret = Disc_ReadHeader(header);
if (ret < 0)
return ret;
/* Check magic word */
if (header->magic != WII_MAGIC)
return -1;
return 0;
}
s32 Disc_BootPartition(u64 offset, u8 videoselected, u8 cheat, u8 vipatch, u8 patchcountrystring)
{
entry_point p_entry;
s32 ret;
/* Open specified partition */
ret = WDVD_OpenPartition(offset);
if (ret < 0)
return ret;
/* Run apploader */
ret = Apploader_Run(&p_entry, cheat, videoselected, vipatch, patchcountrystring);
if (ret < 0)
return ret;
/* Setup low memory */
__Disc_SetLowMem();
/* Set an appropiate video mode */
__Disc_SetVMode(videoselected);
/* Set time */
__Disc_SetTime();
if (cheat == 1) {
/* OCARINA STUFF - FISHEARS*/
memset(gameid, 0, 8);
memcpy(gameid, (char*)0x80000000, 6);
do_sd_code(gameid);
/* OCARINA STUFF - FISHEARS*/
}
/* Disconnect Wiimote */
WPAD_Flush(0);
WPAD_Disconnect(0);
WPAD_Shutdown();
/* Shutdown IOS subsystems */
SYS_ResetSystem(SYS_SHUTDOWN, 0, 0);
/* Jump to entry point */
p_entry();
return 0;
}
s32 Disc_WiiBoot(u8 videoselected, u8 cheat, u8 vipatch, u8 patchcountrystring)
{
u64 offset;
s32 ret;
/* Find game partition offset */
ret = __Disc_FindPartition(&offset);
if (ret < 0)
return ret;
/* Boot partition */
return Disc_BootPartition(offset, videoselected, cheat, vipatch, patchcountrystring);
}
void PatchCountryStrings(void *Address, int Size)
{
u8 SearchPattern[4] = { 0x00, 0x00, 0x00, 0x00 };
u8 PatchData[4] = { 0x00, 0x00, 0x00, 0x00 };
u8 *Addr = (u8*)Address;
int wiiregion = CONF_GetRegion();
switch (wiiregion)
{
case CONF_REGION_JP:
SearchPattern[0] = 0x00;
SearchPattern[1] = 0x4A; // J
SearchPattern[2] = 0x50; // P
break;
case CONF_REGION_EU:
SearchPattern[0] = 0x02;
SearchPattern[1] = 0x45; // E
SearchPattern[2] = 0x55; // U
break;
case CONF_REGION_KR:
SearchPattern[0] = 0x04;
SearchPattern[1] = 0x4B; // K
SearchPattern[2] = 0x52; // R
break;
case CONF_REGION_CN:
SearchPattern[0] = 0x05;
SearchPattern[1] = 0x43; // C
SearchPattern[2] = 0x4E; // N
break;
case CONF_REGION_US:
default:
SearchPattern[0] = 0x01;
SearchPattern[1] = 0x55; // U
SearchPattern[2] = 0x53; // S
}
switch (diskid[3])
{
case 'J':
PatchData[1] = 0x4A; // J
PatchData[2] = 0x50; // P
break;
case 'D':
case 'F':
case 'P':
case 'X':
case 'Y':
PatchData[1] = 0x45; // E
PatchData[2] = 0x55; // U
break;
case 'E':
default:
PatchData[1] = 0x55; // U
PatchData[2] = 0x53; // S
}
while (Size >= 4)
{
if (Addr[0] == SearchPattern[0] && Addr[1] == SearchPattern[1] && Addr[2] == SearchPattern[2] && Addr[3] == SearchPattern[3])
{
//*Addr = PatchData[0];
Addr += 1;
*Addr = PatchData[1];
Addr += 1;
*Addr = PatchData[2];
Addr += 1;
//*Addr = PatchData[3];
Addr += 1;
Size -= 4;
} else
{
Addr += 4;
Size -= 4;
}
}
}

View File

@ -1,57 +0,0 @@
#ifndef _DISC_H_
#define _DISC_H_
#ifdef __cplusplus
extern "C"
{
#endif
/* Disc header structure */
struct discHdr
{
/* Game ID */
u8 id[6];
/* Game version */
u16 version;
/* Audio streaming */
u8 streaming;
u8 bufsize;
/* Padding */
u8 unused1[14];
/* Magic word */
u32 magic;
/* Padding */
u8 unused2[4];
/* Game title */
char title[64];
/* Encryption/Hashing */
u8 encryption;
u8 h3_verify;
/* Padding */
u8 unused3[30];
} ATTRIBUTE_PACKED;
/* Prototypes */
s32 Disc_Init(void);
s32 Disc_Open(void);
s32 Disc_Wait(void);
void __Disc_SetLowMem(void);
s32 Disc_SetUSB(u8 *, int ios222);
s32 Disc_ReadHeader(void *);
s32 Disc_IsWii(void);
s32 Disc_BootPartition(u64, u8, u8, u8, u8);
s32 Disc_WiiBoot(u8, u8, u8, u8);
void PatchCountryStrings(void *Address, int Size);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,122 +0,0 @@
#include "dns.h"
/**
* Resolves a domainname to an ip address
* It makes use of net_gethostbyname from libogc, which in turn makes use of a Wii BIOS function
* Just like the net_gethostbyname function this function is NOT threadsafe!
*
* @param char* The domain name to resolve
* @return u32 The ipaddress represented by four bytes inside an u32 (in network order)
*/
u32 getipbyname(char *domain)
{
//Care should be taken when using net_gethostbyname,
//it returns a static buffer which makes it not threadsafe
//TODO: implement some locking mechanism to make below code atomic
struct hostent *host = net_gethostbyname(domain);
if(host == NULL) {
return 0;
}
u32 *ip = (u32*)host->h_addr_list[0];
return *ip;
}
//Defines how many DNS entries should be cached by getipbynamecached()
#define MAX_DNS_CACHE_ENTRIES 20
//The cache is defined as a linked list,
//The last resolved domain name will always be at the front
//This will allow heavily used domainnames to always stay cached
struct dnsentry {
char *domain;
u32 ip;
struct dnsentry *nextnode;
} ;
static struct dnsentry *firstdnsentry = NULL;
static int dnsentrycount = 0;
/**
* Performs the same function as getipbyname(),
* except that it will prevent extremely expensive net_gethostbyname() calls by caching the result
*/
u32 getipbynamecached(char *domain)
{
//Search if this domainname is already cached
struct dnsentry *node = firstdnsentry;
struct dnsentry *previousnode = NULL;
while(node != NULL)
{
if(strcmp(node->domain, domain) == 0)
{
//DNS node found in the cache, move it to the front of the list
if(previousnode != NULL)
previousnode->nextnode = node->nextnode;
if(node != firstdnsentry)
node->nextnode = firstdnsentry;
firstdnsentry = node;
return node->ip;
}
//Go to the next element in the list
previousnode = node;
node = node->nextnode;
}
u32 ip = getipbyname(domain);
//No cache of this domain could be found, create a cache node and add it to the front of the cache
struct dnsentry *newnode = malloc(sizeof(struct dnsentry));
if(newnode == NULL) {
return ip;
}
newnode->ip = ip;
newnode->domain = malloc(strlen(domain)+1);
if(newnode->domain == NULL)
{
free(newnode);
return ip;
}
strcpy(newnode->domain, domain);
newnode->nextnode = firstdnsentry;
firstdnsentry = newnode;
dnsentrycount++;
//If the cache grows too big delete the last (and probably least important) node of the list
if(dnsentrycount > MAX_DNS_CACHE_ENTRIES)
{
struct dnsentry *node = firstdnsentry;
struct dnsentry *previousnode = NULL;
//Fetch the last two elements of the list
while(node->nextnode != NULL)
{
previousnode = node;
node = node->nextnode;
}
if(node == NULL)
{
printf("Configuration error, MAX_DNS_ENTRIES reached while the list is empty\n");
exit(1);
} else if(previousnode == NULL)
{
firstdnsentry = NULL;
} else {
previousnode->nextnode = NULL;
}
free(node->domain);
free(node);
dnsentrycount--;
}
return newnode->ip;
}

View File

@ -1,23 +0,0 @@
#ifndef _DNS_H_
#define _DNS_H_
#include <network.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> //usleep
#ifdef __cplusplus
extern "C"
{
#endif
u32 getipbyname(char *domain);
u32 getipbynamecached(char *domain);
#ifdef __cplusplus
}
#endif
#endif /* _DNS_H_ */

View File

@ -1,612 +0,0 @@
/*
* Copyright (C) 2008 Nuke (wiinuke@gmail.com)
*
* this file is part of GeckoOS for USB Gecko
* http://www.usbgecko.com
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
#include <gcutil.h>
#include <ogc/lwp_queue.h>
#include <gccore.h>
#include "dvd_broadway.h"
#define DI_CMDCTX_CNT 4
#define DVD_DISKIDSIZE 0x20
#define DVD_DRVINFSIZE 0x20
#define IOCTL_DI_INQUIRY 0x12
#define IOCTL_DI_READID 0x70
#define IOCTL_DI_READ 0x71
#define IOCTL_DI_WAITCVRCLOSE 0x79
#define IOCTL_DI_COVER 0x7A
#define IOCTL_DI_RESETNOTIFY 0x7E
#define IOCTL_DI_RESET 0x8A
#define IOCTL_DI_OPENPART 0x8B
#define IOCTL_DI_CLOSEPART 0x8C
#define IOCTL_DI_UNENCREAD 0x8D
#define IOCTL_DI_ENABLE_DVD 0x8E
#define IOCTL_DI_SEEK 0xAB
#define IOCTL_DI_READ_DVDVIDEO 0xD0
#define IOCTL_DI_STOPLASER 0xD2
#define IOCTL_DI_OFFSET 0xD9
#define IOCTL_DI_REQERROR 0xE0
#define IOCTL_DI_STOPMOTOR 0xE3
#define IOCTL_DI_SETOFFBASE 0xF0
#define IOCTL_DI_GETOFFBASE 0xF1
#define IOCTL_DI_SETCRYPTMODE 0xF2
#define IOCTL_DI_GETCRYPTMODE 0xF3
#define IOCTL_DI_SETDVDROMMODE 0xF4
#define IOCTL_DI_GETDVDROMMODE 0xF5
#define _SHIFTL(v, s, w) \
((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s)))
#define _SHIFTR(v, s, w) \
((u32)(((u32)(v) >> (s)) & ((0x01 << (w)) - 1)))
struct dicommand
{
u32 diReg[8];
};
struct dicontext
{
lwp_node node;
dvdcallbacklow cb;
struct dicommand *cmd;
};
static s32 __dvd_fd = -1;
static u32 __dvd_spinupval = 1;
static lwp_queue __di_contextq;
static u32 __dvd_readlength = 0;
static u32 __dvd_cbinprogress = 0;
static u32 __dvd_reqinprogress = 0;
static u32 __dvd_lowinitcalled = 0;
static struct dicommand *__di_commands = NULL;
static struct dicontext __di_contexts[DI_CMDCTX_CNT];
static u32 __di_regbuffer[0x08] ATTRIBUTE_ALIGN(32);
static u32 __di_regvalcache[0x08] ATTRIBUTE_ALIGN(32);
static u32 __di_lastticketerror[0x08] ATTRIBUTE_ALIGN(32);
static ioctlv __di_iovector[0x08] ATTRIBUTE_ALIGN(32);
static char __di_fs[] ATTRIBUTE_ALIGN(32) = "/dev/di";
extern u32 __IPC_ClntInit();
static __inline__ lwp_node* __lwp_queue_head(lwp_queue *queue)
{
return (lwp_node*)queue;
}
static __inline__ lwp_node* __lwp_queue_tail(lwp_queue *queue)
{
return (lwp_node*)&queue->perm_null;
}
static __inline__ void __lwp_queue_init_empty(lwp_queue *queue)
{
queue->first = __lwp_queue_tail(queue);
queue->perm_null = NULL;
queue->last = __lwp_queue_head(queue);
}
static struct dicontext* __dvd_getcontext(dvdcallbacklow cb)
{
struct dicontext *ctx;
ctx = (struct dicontext*)__lwp_queue_get(&__di_contextq);
if(ctx!=NULL) ctx->cb = cb;
return ctx;
}
static s32 __dvd_iostransactionCB(s32 result,void *usrdata)
{
struct dicontext *ctx = (struct dicontext*)usrdata;
__dvd_reqinprogress = 0;
if(ctx->cb!=NULL) {
__dvd_cbinprogress = 1;
if(result!=0) __dvd_readlength = 0;
ctx->cb(result);
__dvd_cbinprogress = 0;
}
__lwp_queue_append(&__di_contextq,&ctx->node);
return 0;
}
static s32 __dvd_ioscoverregisterCB(s32 result,void *usrdata)
{
struct dicontext *ctx = (struct dicontext*)usrdata;
__dvd_reqinprogress = 0;
__di_regvalcache[1] = __di_regbuffer[0];
if(ctx->cb!=NULL) {
__dvd_cbinprogress = 1;
ctx->cb(result);
__dvd_cbinprogress = 0;
}
__lwp_queue_append(&__di_contextq,&ctx->node);
return 0;
}
static s32 __dvd_ioscovercloseCB(s32 result,void *usrdata)
{
struct dicontext *ctx = (struct dicontext*)usrdata;
__dvd_reqinprogress = 0;
if(ctx->cb!=NULL) {
__dvd_cbinprogress = 1;
ctx->cb(result);
__dvd_cbinprogress = 0;
}
__lwp_queue_append(&__di_contextq,&ctx->node);
return 0;
}
s32 bwDVD_LowInit()
{
s32 i,ret = 0;
u32 ipclo,ipchi;
lwp_queue inactives;
struct dicontext *ctx;
if(__dvd_lowinitcalled==0) {
ret = __IPC_ClntInit();
if(ret<0) return ret;
ipclo = (((u32)IPC_GetBufferLo()+0x1f)&~0x1f);
ipchi = (u32)IPC_GetBufferHi();
if(ipchi>=(ipclo+(sizeof(struct dicommand)*DI_CMDCTX_CNT))) {
__di_commands = (struct dicommand*)ipclo;
IPC_SetBufferLo((void*)(ipclo+(sizeof(struct dicommand)*DI_CMDCTX_CNT)));
memset(__di_commands,0,(sizeof(struct dicommand)*DI_CMDCTX_CNT));
i = 0;
__lwp_queue_init_empty(&__di_contextq);
__lwp_queue_initialize(&inactives,__di_contexts,DI_CMDCTX_CNT,sizeof(struct dicontext));
while((ctx=(struct dicontext*)__lwp_queue_get(&inactives))!=NULL) {
ctx->cmd = &__di_commands[i];
ctx->cb = NULL;
__lwp_queue_append(&__di_contextq,&ctx->node);
i++;
}
}
ret = IOS_Open(__di_fs,0);
if(ret<0) return ret;
__dvd_fd = ret;
// __dvd_lowinitcalled = 1;
// printf("DVD_LowInit(%d)\n",ret);
}
return 0;
}
s32 bwDVD_LowInquiry(dvddrvinfo *info,dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_INQUIRY<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_INQUIRY,cmd->diReg,sizeof(struct dicommand),info,DVD_DRVINFSIZE,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowReadID(dvddiskid *diskID,dvdcallbacklow cb)
{
s32 ret = 0;
struct dicontext *ctx;
struct dicommand *cmd;
// printf("DVD_LowReadID()\n");
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_READID<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_READID,cmd->diReg,sizeof(struct dicommand),diskID,DVD_DISKIDSIZE,__dvd_iostransactionCB,ctx);
// printf("DVD_LowReadID(%d)\n",ret);
return ret;
}
s32 bwDVD_LowRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
if(buf==NULL || ((u32)buf%32)!=0) return -1;
__dvd_reqinprogress = 1;
__dvd_readlength = len;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_READ<<24);
cmd->diReg[1] = len;
cmd->diReg[2] = offset;
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_READ,cmd->diReg,sizeof(struct dicommand),buf,len,__dvd_iostransactionCB,ctx);
return ret;
}
// never got this function working, probably removed from wii
s32 bwDVD_LowReadVideo(void *buf,u32 len,u32 offset,dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
__dvd_readlength = len;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_READ_DVDVIDEO<<24);
cmd->diReg[1] = len;
cmd->diReg[2] = offset;
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_READ_DVDVIDEO,cmd->diReg,sizeof(struct dicommand),buf,len,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowStopLaser(dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_STOPLASER<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_STOPLASER,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx);
return ret;
}
// never got this function working, probably removed from wii
s32 bwDVD_EnableVideo(dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_ENABLE_DVD<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_ENABLE_DVD,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowSeek(u32 offset,dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_SEEK<<24);
cmd->diReg[1] = offset;
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_SEEK,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowOffset(u64 offset,dvdcallbacklow cb)
{
s32 ret;
u32 *off = (u32*)(void*)(&offset);
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_OFFSET<<24);
cmd->diReg[1] = 0;
if(off[0]) cmd->diReg[1] = 1;
cmd->diReg[2] = off[1];
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_OFFSET,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowPrepareCoverRegister(dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_COVER<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_COVER,cmd->diReg,sizeof(struct dicommand),__di_regbuffer,0x20,__dvd_ioscoverregisterCB,ctx);
return ret;
}
s32 bwDVD_LowOpenPartition(u32 offset,void *eticket,u32 certin_len,void *certificate_in,void *certificate_out,dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
if(eticket!=NULL && ((u32)eticket%32)!=0) return -1;
if(certificate_in!=NULL && ((u32)certificate_in%32)!=0) return -1;
if(certificate_out!=NULL && ((u32)certificate_out%32)!=0) return -1;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_OPENPART<<24);
cmd->diReg[1] = offset;
__di_iovector[0].data = cmd;
__di_iovector[0].len = sizeof(struct dicommand);
__di_iovector[1].data = eticket;
if(eticket==NULL) __di_iovector[1].len = 0;
else __di_iovector[1].len = 676;
__di_iovector[2].data = certificate_in;
if(certificate_in==NULL) __di_iovector[2].len = 0;
else __di_iovector[2].len = certin_len;
__di_iovector[3].data = certificate_out;
__di_iovector[3].len = 18916;
__di_iovector[4].data = __di_lastticketerror;
__di_iovector[4].len = 0x20;
ret = IOS_IoctlvAsync(__dvd_fd,IOCTL_DI_OPENPART,3,2,__di_iovector,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowClosePartition(dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_CLOSEPART<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_CLOSEPART,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowUnencryptedRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
__dvd_readlength = len;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_UNENCREAD<<24);
cmd->diReg[1] = len;
cmd->diReg[2] = offset;
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_UNENCREAD,cmd->diReg,sizeof(struct dicommand),buf,len,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowWaitCoverClose(dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_WAITCVRCLOSE<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_WAITCVRCLOSE,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_ioscovercloseCB,ctx);
return ret;
}
s32 bwDVD_LowResetNotify()
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
if(__dvd_cbinprogress==1) return -1;
ctx = __dvd_getcontext(NULL);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_RESETNOTIFY<<24);
ret = IOS_Ioctl(__dvd_fd,IOCTL_DI_RESETNOTIFY,cmd->diReg,sizeof(struct dicommand),NULL,0);
return ret;
}
s32 bwDVD_LowReset(dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
// printf("DVD_LowReset()\n");
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_RESET<<24);
cmd->diReg[1] = __dvd_spinupval;
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_RESET,cmd->diReg,sizeof(struct dicommand),NULL,0,__dvd_iostransactionCB,ctx);
// printf("DVD_LowReset(%d)\n",ret);
return ret;
}
s32 bwDVD_LowStopMotor(u8 stop1,u8 stop2,dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_STOPMOTOR<<24);
cmd->diReg[1] = (stop1<<24);
cmd->diReg[2] = (stop2<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_STOPMOTOR,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_LowRequestError(dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_REQERROR<<24);
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_REQERROR,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_SetDecryption(s32 mode, dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_SETCRYPTMODE<<24);
cmd->diReg[1] = mode;
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_SETCRYPTMODE,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx);
return ret;
}
s32 bwDVD_SetOffset(u32 offset, dvdcallbacklow cb)
{
s32 ret;
struct dicontext *ctx;
struct dicommand *cmd;
__dvd_reqinprogress = 1;
ctx = __dvd_getcontext(cb);
if(ctx==NULL) return IPC_ENOMEM;
cmd = ctx->cmd;
cmd->diReg[0] = (IOCTL_DI_SETOFFBASE<<24);
cmd->diReg[1] = offset;
ret = IOS_IoctlAsync(__dvd_fd,IOCTL_DI_SETOFFBASE,cmd->diReg,sizeof(struct dicommand),__di_regvalcache,0x20,__dvd_iostransactionCB,ctx);
return ret;
}

View File

@ -1,53 +0,0 @@
/*
* Copyright (C) 2008 Nuke (wiinuke@gmail.com)
*
* this file is part of GeckoOS for USB Gecko
* http://www.usbgecko.com
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __DVD_BROADWAY_H__
#define __DVD_BROADWAY_H__
#include <gctypes.h>
#include <ogc/ipc.h>
#include <ogc/dvd.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef void (*dvdcallbacklow)(s32 result);
s32 bwDVD_LowInit();
s32 bwDVD_LowInquiry(dvddrvinfo *info,dvdcallbacklow cb);
s32 bwDVD_LowReadID(dvddiskid *diskID,dvdcallbacklow cb);
s32 bwDVD_LowClosePartition(dvdcallbacklow cb);
s32 bwDVD_LowOpenPartition(u32 offset,void *eticket,u32 certin_len,void *certificate_in,void *certificate_out,dvdcallbacklow cb);
s32 bwDVD_LowUnencryptedRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb);
s32 bwDVD_LowReset(dvdcallbacklow cb);
s32 bwDVD_LowWaitCoverClose(dvdcallbacklow cb);
s32 bwDVD_LowRead(void *buf,u32 len,u32 offset,dvdcallbacklow cb);
s32 bwDVD_EnableVideo(dvdcallbacklow cb);
s32 bwDVD_LowReadVideo(void *buf,u32 len,u32 offset,dvdcallbacklow cb);
s32 bwDVD_SetDecryption(s32 mode, dvdcallbacklow cb);
s32 bwDVD_SetOffset(u32 offset, dvdcallbacklow cb);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif

View File

@ -1,57 +0,0 @@
#include <fat.h>
#include <sys/dir.h>
#include <ogc/lwp_watchdog.h>
#include <ogc/mutex.h>
#include <ogc/system.h>
#include <ogc/usbstorage.h>
#include <sdcard/wiisd_io.h>
#define CACHE 1
#define SECTORS 64
int USBDevice_Init()
{
//right now only mounts first partition and only under IOS36
__io_usbstorage.startup();
if (fatMount("USB", &__io_usbstorage, 0, CACHE, SECTORS)) {
return 1;
}
return -1;
}
void USBDevice_deInit()
{
//First unmount all the devs...
fatUnmount("USB");
//...and then shutdown em!
__io_usbstorage.shutdown();
}
int isSdInserted()
{
return __io_wiisd.isInserted();
}
int SDCard_Init()
{
//mount SD if inserted
__io_wiisd.startup();
if (!isSdInserted()){
return -1;
}
if (fatMount("SD", &__io_wiisd, 0, CACHE, SECTORS)) {
return 1;
}
return -1;
}
void SDCard_deInit()
{
//First unmount all the devs...
fatUnmount("SD:/");
//...and then shutdown em!
__io_wiisd.shutdown();
}

View File

@ -1,296 +1,20 @@
/****************************************************************************
* libwiigui Template
* Tantric 2009
*
* imagelist.h
* Contains a list of all of the files in the images, fonts, sounds folders
***************************************************************************/
#ifndef _FILELIST_H_
#define _FILELIST_H_
#include <gccore.h>
extern const u8 font_ttf[];
extern const u32 font_ttf_size;
extern const u8 clock_ttf[];
extern const u32 clock_ttf_size;
extern const u8 closebutton_png[];
extern const u32 closebutton_png_size;
extern const u8 sdcard_png[];
extern const u32 sdcard_png_size;
extern const u8 wiimote_png[];
extern const u32 wiimote_png_size;
extern const u8 bg_music_ogg[];
extern const u32 bg_music_ogg_size;
extern const u8 credits_music_ogg[];
extern const u32 credits_music_ogg_size;
extern const u8 menuin_ogg[];
extern const u32 menuin_ogg_size;
extern const u8 menuout_ogg[];
extern const u32 menuout_ogg_size;
extern const u8 tab_bg1_png[];
extern const u32 tab_bg1_png_size;
extern const u8 tab_bg2_png[];
extern const u32 tab_bg2_png_size;
extern const u8 tab_bg3_png[];
extern const u32 tab_bg3_png_size;
extern const u8 credits_button_png[];
extern const u32 credits_button_png_size;
extern const u8 credits_button_over_png[];
extern const u32 credits_button_over_png_size;
extern const u8 button_over_pcm[];
extern const u32 button_over_pcm_size;
extern const u8 button_click_pcm[];
extern const u32 button_click_pcm_size;
extern const u8 button_click2_pcm[];
extern const u32 button_click2_pcm_size;
extern const u8 tooltip_left_png[];
extern const u32 tooltip_left_png_size;
extern const u8 tooltip_tile_png[];
extern const u32 tooltip_tile_png_size;
extern const u8 tooltip_right_png[];
extern const u32 tooltip_right_png_size;
extern const u8 startgame_arrow_left_png[];
extern const u32 startgame_arrow_left_png_size;
extern const u8 startgame_arrow_right_png[];
extern const u32 startgame_arrow_right_png_size;
extern const u8 credits_bg_png[];
extern const u32 credits_bg_png_size;
extern const u8 little_star_png[];
extern const u32 little_star_png_size;
extern const u8 background_png[];
extern const u32 background_png_size;
extern const u8 wbackground_png[];
extern const u32 wbackground_png_size;
extern const u8 bg_options_settings_png[];
extern const u32 bg_options_settings_png_size;
extern const u8 settings_background_png[];
extern const u32 settings_background_png_size;
extern const u8 nocover_png[];
extern const u32 nocover_png_size;
extern const u8 nodisc_png[];
extern const u32 nodisc_png_size;
extern const u8 button_install_png[];
extern const u32 button_install_png_size;
extern const u8 button_install_over_png[];
extern const u32 button_install_over_png_size;
extern const u8 dialogue_box_startgame_png[];
extern const u32 dialogue_box_startgame_png_size;
extern const u8 wdialogue_box_startgame_png[];
extern const u32 wdialogue_box_startgame_png_size;
extern const u8 button_dialogue_box_startgame_png[];
extern const u32 button_dialogue_box_startgame_size;
extern const u8 button_dialogue_box_png[];
extern const u32 button_dialogue_box_size;
extern const u8 keyboard_textbox_png[];
extern const u32 keyboard_textbox_png_size;
extern const u8 keyboard_key_png[];
extern const u32 keyboard_key_png_size;
extern const u8 keyboard_key_over_png[];
extern const u32 keyboard_key_over_png_size;
extern const u8 keyboard_mediumkey_over_png[];
extern const u32 keyboard_mediumkey_over_png_size;
extern const u8 keyboard_largekey_over_png[];
extern const u32 keyboard_largekey_over_png_size;
extern const u8 menu_button_png[];
extern const u32 menu_button_size;
extern const u8 menu_button_over_png[];
extern const u32 menu_button_over_size;
extern const u8 settings_button_png[];
extern const u32 settings_button_size;
extern const u8 settings_button_over_png[];
extern const u32 settings_button_over_size;
extern const u8 settings_menu_button_png[];
extern const u32 settings_menu_button_size;
extern const u8 wiimote_poweroff_png[];
extern const u32 wiimote_poweroff_png_size;
extern const u8 dialogue_box_png[];
extern const u32 dialogue_box_png_size;
extern const u8 wiimote_poweroff_over_png[];
extern const u32 wiimote_poweroff_over_png_size;
extern const u8 bg_options_png[];
extern const u32 bg_options_png_size;
extern const u8 bg_options_entry_png[];
extern const u32 bg_options_entry_png_size;
extern const u8 scrollbar_png[];
extern const u32 scrollbar_png_size;
extern const u8 scrollbar_arrowup_png[];
extern const u32 scrollbar_arrowup_png_size;
extern const u8 scrollbar_arrowup_over_png[];
extern const u32 scrollbar_arrowup_over_png_size;
extern const u8 scrollbar_arrowdown_png[];
extern const u32 scrollbar_arrowdown_png_size;
extern const u8 scrollbar_arrowdown_over_png[];
extern const u32 scrollbar_arrowdown_over_png_size;
extern const u8 scrollbar_box_png[];
extern const u32 scrollbar_box_png_size;
extern const u8 scrollbar_box_over_png[];
extern const u32 scrollbar_box_over_png_size;
extern const u8 progressbar_png[];
extern const u32 progressbar_png_size;
extern const u8 progressbar_empty_png[];
extern const u32 progressbar_empty_png_size;
extern const u8 progressbar_outline_png[];
extern const u32 progressbar_outline_png_size;
extern const u8 player1_point_png[];
extern const u32 player1_point_png_size;
extern const u8 player2_point_png[];
extern const u32 player2_point_png_size;
extern const u8 player3_point_png[];
extern const u32 player3_point_png_size;
extern const u8 player4_point_png[];
extern const u32 player4_point_png_size;
extern const u8 battery_png[];
extern const u32 battery_png_size;
extern const u8 battery_bar_png[];
extern const u32 battery_bar_png_size;
extern const u8 battery_white_png[];
extern const u32 battery_white_png_size;
extern const u8 battery_bar_white_png[];
extern const u32 battery_bar_white_png_size;
extern const u8 battery_red_png[];
extern const u32 battery_red_png_size;
extern const u8 arrow_next_png[];
extern const u32 arrow_next_png_size;
extern const u8 arrow_previous_png[];
extern const u32 arrow_previous_png_size;
extern const u8 mp3_pause_png[];
extern const u32 mp3_pause_png_size;
extern const u8 exit_top_png[];
extern const u32 exit_top_png_size;
extern const u8 exit_top_over_png[];
extern const u32 exit_top_over_png_size;
extern const u8 exit_bottom_png[];
extern const u32 exit_bottom_png_size;
extern const u8 exit_bottom_over_png[];
extern const u32 exit_bottom_over_png_size;
extern const u8 exit_button_png[];
extern const u32 exit_button_png_size;
extern const u8 mp3_stop_png[];
extern const u32 mp3_stop_png_size;
/****************************************************************************
* filelist.h
* Contains a list of all of the files in the images, fonts, sounds folders
***************************************************************************/
extern const u8 favorite_png[];
extern const u32 favorite_png_size;
#ifndef _FILELIST_H_
#define _FILELIST_H_
extern const u8 not_favorite_png[];
extern const u32 not_favorite_png_size;
extern const u8 favIcon_png[];
extern const u32 favIcon_png_size;
extern const u8 abcIcon_png[];
extern const u32 abcIcon_png_size;
extern const u8 playCountIcon_png[];
extern const u32 playCountIcon_png_size;
#include <gccore.h>
extern const u8 arrangeList_png[];
extern const u32 arrangeList_png_size;
extern const u8 arrangeGrid_png[];
extern const u32 arrangeGrid_png_size;
extern const u8 arrangeCarousel_png[];
extern const u32 arrangeCarousel_png_size;
extern const u8 favIcon_gray_png[];
extern const u32 favIcon_gray_png_size;
extern const u8 abcIcon_gray_png[];
extern const u32 abcIcon_gray_png_size;
extern const u8 playCountIcon_gray_png[];
extern const u32 playCountIcon_gray_png_size;
extern const u8 arrangeGrid_gray_png[];
extern const u32 arrangeGrid_gray_png_size;
extern const u8 arrangeList_gray_png[];
extern const u32 arrangeList_gray_png_size;
extern const u8 arrangeCarousel_gray_png[];
extern const u32 arrangeCarousel_gray_png_size;
extern const u8 updateRev_png[];
extern const u32 updateRev_png_size;
#endif
extern const u8 app_booter_bin[];
extern const u32 app_booter_bin_size;
extern const u8 background_png[];
extern const u32 background_png_size;
extern const u8 background169_png[];
extern const u32 background169_png_size;
#endif

Binary file not shown.

Binary file not shown.

View File

@ -1,115 +0,0 @@
/*
* Copyright (C) 2008 Nuke (wiinuke@gmail.com)
*
* this file is part of GeckoOS for USB Gecko
* http://www.usbgecko.com
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gccore.h>
#include <malloc.h>
#include <sys/unistd.h>
#include <fat.h>
#include <sdcard/wiisd_io.h>
#include "ogc/ipc.h"
#include "fst.h"
#include "dvd_broadway.h"
#include "wpad.h"
#define FSTDIRTYPE 1
#define FSTFILETYPE 0
#define ENTRYSIZE 0xC
#define FILEDIR "SD:/codes"
#define MAX_FILENAME_LEN 128
static vu32 dvddone = 0;
// Real basic
u32 do_sd_code(char *filename)
{
FILE *fp;
u8 *filebuff;
u32 filesize;
u32 ret;
char filepath[128];
__io_wiisd.startup();
ret = fatMountSimple("SD", &__io_wiisd);
if (!ret) {
return 0;
}
fflush(stdout);
sprintf(filepath, FILEDIR "/%s", filename);
filepath[16] = 0x2E;
filepath[17] = 0x67;
filepath[18] = 0x63;
filepath[19] = 0x74;
filepath[20] = 0;
//printf("filename %s\n",filepath);
fp = fopen(filepath, "rb");
if (!fp) {
fatUnmount("SD");
__io_wiisd.shutdown();
return 0;
}
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, 0, SEEK_SET);
filebuff = (u8*) malloc (filesize);
if(filebuff == 0){
fclose(fp);
sleep(2);
return 0;
}
ret = fread(filebuff, 1, filesize, fp);
if(ret != filesize){
free(filebuff);
fclose(fp);
fatUnmount("SD");
__io_wiisd.shutdown();
return 0;
}
memcpy((void*)0x800027E8,filebuff,filesize);
*(vu8*)0x80001807 = 0x01;
free(filebuff);
fclose(fp);
fatUnmount("SD");
__io_wiisd.shutdown();
return 1;
}

View File

@ -1,38 +0,0 @@
/*
* Copyright (C) 2008 Nuke (wiinuke@gmail.com)
*
* this file is part of GeckoOS for USB Gecko
* http://www.usbgecko.com
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __FST_H__
#define __FST_H__
#ifdef __cplusplus
extern "C"
{
#endif
//u32 do_fst(u32 fstlocation);
u32 do_sd_code(char *filename);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,15 +0,0 @@
unsigned char fwrite_patch_bin[] = {
0x7c, 0x84, 0x29, 0xd6, 0x39, 0x40, 0x00, 0x00, 0x94, 0x21, 0xff, 0xf0,
0x93, 0xe1, 0x00, 0x0c, 0x7f, 0x8a, 0x20, 0x00, 0x40, 0x9c, 0x00, 0x64,
0x3d, 0x00, 0xcd, 0x00, 0x3d, 0x60, 0xcd, 0x00, 0x3d, 0x20, 0xcd, 0x00,
0x61, 0x08, 0x68, 0x14, 0x61, 0x6b, 0x68, 0x24, 0x61, 0x29, 0x68, 0x20,
0x39, 0x80, 0x00, 0xd0, 0x38, 0xc0, 0x00, 0x19, 0x38, 0xe0, 0x00, 0x00,
0x91, 0x88, 0x00, 0x00, 0x7c, 0x03, 0x50, 0xae, 0x54, 0x00, 0xa0, 0x16,
0x64, 0x00, 0xb0, 0x00, 0x90, 0x0b, 0x00, 0x00, 0x90, 0xc9, 0x00, 0x00,
0x80, 0x09, 0x00, 0x00, 0x70, 0x1f, 0x00, 0x01, 0x40, 0x82, 0xff, 0xf8,
0x80, 0x0b, 0x00, 0x00, 0x90, 0xe8, 0x00, 0x00, 0x54, 0x00, 0x37, 0xfe,
0x7d, 0x4a, 0x02, 0x14, 0x7f, 0x8a, 0x20, 0x00, 0x41, 0x9c, 0xff, 0xc8,
0x7c, 0xa3, 0x2b, 0x78, 0x83, 0xe1, 0x00, 0x0c, 0x38, 0x21, 0x00, 0x10,
0x4e, 0x80, 0x00, 0x20
};
unsigned int fwrite_patch_bin_len = 136;

View File

@ -1,60 +0,0 @@
/*
* Copyright (C) 2008 Nuke (wiinuke@gmail.com)
*
* this file is part of GeckoOS for USB Gecko
* http://www.usbgecko.com
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __GECKOMENU_H__
#define __GECKOMENU_H__
#define ROOTMENU 0
#define ABOUTMENU 1
#define CONFIGMENU 2
#define REBOOTMENU 3
#define root_itemcount 7
#define about_itemcount 4
#define config_itemcount 9
#define rebooter_itemcount 6
u32 currentmenu; // 0 ROOT
u32 rootmenu_item;
u32 menufreeze;
u32 langselect;
u32 langsaved;
u32 pal60select;
u32 pal50select;
u32 viselect;
u32 ntscselect;
u32 hookselect;
u32 ocarinaselect;
u32 recoveryselect;
u32 regionfreeselect;
u32 nocopyselect;
u32 buttonskipselect;
u32 doprogress(u32 progstate, u32 noelements);
void drawmenu(u32 menuid);
void drawselected(u32 menuidpos);
void processwpad();
void clearscreen(u32 *framebuffer, u16 xscreen, u16 yscreen, u16 width, u16 height, u32 color);
void drawicon(u32 *framebuffer, u16 xscreen, u16 yscreen, u16 width, u16 height, u32 gicon);
u32 CvtRGB (u8 r1, u8 g1, u8 b1, u8 r2, u8 g2, u8 b2);
#endif // __GECKOLOAD_H__

View File

@ -1,245 +0,0 @@
#include "http.h"
/**
* Emptyblock is a statically defined variable for functions to return if they are unable
* to complete a request
*/
const struct block emptyblock = {0, NULL};
//The maximum amount of bytes to send per net_write() call
#define NET_BUFFER_SIZE 1024
// Write our message to the server
static s32 send_message(s32 server, char *msg) {
s32 bytes_transferred = 0;
s32 remaining = strlen(msg);
while (remaining) {
if ((bytes_transferred = net_write(server, msg, remaining > NET_BUFFER_SIZE ? NET_BUFFER_SIZE : remaining)) > 0) {
remaining -= bytes_transferred;
usleep (20 * 1000);
} else if (bytes_transferred < 0) {
return bytes_transferred;
} else {
return -ENODATA;
}
}
return 0;
}
/**
* Connect to a remote server via TCP on a specified port
*
* @param u32 ip address of the server to connect to
* @param u32 the port to connect to on the server
* @return s32 The connection to the server (negative number if connection could not be established)
*/
static s32 server_connect(u32 ipaddress, u32 socket_port) {
//Initialize socket
s32 connection = net_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if (connection < 0) return connection;
struct sockaddr_in connect_addr;
memset(&connect_addr, 0, sizeof(connect_addr));
connect_addr.sin_family = AF_INET;
connect_addr.sin_port = socket_port;
connect_addr.sin_addr.s_addr= ipaddress;
//Attemt to open the socket
if (net_connect(connection, (struct sockaddr*)&connect_addr, sizeof(connect_addr)) == -1) {
net_close(connection);
return -1;
}
return connection;
}
//The amount of memory in bytes reserved initially to store the HTTP response in
//Be careful in increasing this number, reading from a socket on the Wii
//will fail if you request more than 20k or so
#define HTTP_BUFFER_SIZE 1024 * 5
//The amount of memory the buffer should expanded with if the buffer is full
#define HTTP_BUFFER_GROWTH 1024 * 5
/**
* This function reads all the data from a connection into a buffer which it returns.
* It will return an empty buffer if something doesn't go as planned
*
* @param s32 connection The connection identifier to suck the response out of
* @return block A 'block' struct (see http.h) in which the buffer is located
*/
struct block read_message(s32 connection)
{
//Create a block of memory to put in the response
struct block buffer;
buffer.data = malloc(HTTP_BUFFER_SIZE);
buffer.size = HTTP_BUFFER_SIZE;
if(buffer.data == NULL) {
return emptyblock;
}
//The offset variable always points to the first byte of memory that is free in the buffer
u32 offset = 0;
while(1)
{
//Fill the buffer with a new batch of bytes from the connection,
//starting from where we left of in the buffer till the end of the buffer
s32 bytes_read = net_read(connection, buffer.data + offset, buffer.size - offset);
//Anything below 0 is an error in the connection
if(bytes_read < 0)
{
//printf("Connection error from net_read() Errorcode: %i\n", bytes_read);
return emptyblock;
}
//No more bytes were read into the buffer,
//we assume this means the HTTP response is done
if(bytes_read == 0)
{
break;
}
offset += bytes_read;
//Check if we have enough buffer left over,
//if not expand it with an additional HTTP_BUFFER_GROWTH worth of bytes
if(offset >= buffer.size)
{
buffer.size += HTTP_BUFFER_GROWTH;
buffer.data = realloc(buffer.data, buffer.size);
if(buffer.data == NULL)
{
return emptyblock;
}
}
}
//At the end of above loop offset should be precisely the amount of bytes that were read from the connection
buffer.size = offset;
//Shrink the size of the buffer so the data fits exactly in it
realloc(buffer.data, buffer.size);
return buffer;
}
/**
* Downloads the contents of a URL to memory
* This method is not threadsafe (because networking is not threadsafe on the Wii)
*/
struct block downloadfile(const char *url)
{
//Check if the url starts with "http://", if not it is not considered a valid url
if(strncmp(url, "http://", strlen("http://")) != 0)
{
//printf("URL '%s' doesn't start with 'http://'\n", url);
return emptyblock;
}
//Locate the path part of the url by searching for '/' past "http://"
char *path = strchr(url + strlen("http://"), '/');
//At the very least the url has to end with '/', ending with just a domain is invalid
if(path == NULL)
{
//printf("URL '%s' has no PATH part\n", url);
return emptyblock;
}
//Extract the domain part out of the url
int domainlength = path - url - strlen("http://");
if(domainlength == 0)
{
//printf("No domain part in URL '%s'\n", url);
return emptyblock;
}
char domain[domainlength + 1];
strncpy(domain, url + strlen("http://"), domainlength);
domain[domainlength] = '\0';
//Parsing of the URL is done, start making an actual connection
u32 ipaddress = getipbynamecached(domain);
if(ipaddress == 0)
{
//printf("\ndomain %s could not be resolved", domain);
return emptyblock;
}
s32 connection = server_connect(ipaddress, 80);
if(connection < 0) {
//printf("Error establishing connection");
return emptyblock;
}
//Form a nice request header to send to the webserver
char* headerformat = "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: WiiEarthh 1.0\r\n\r\n";;
char header[strlen(headerformat) + strlen(domain) + strlen(path)];
sprintf(header, headerformat, path, domain);
//Do the request and get the response
send_message(connection, header);
struct block response = read_message(connection);
net_close(connection);
//Search for the 4-character sequence \r\n\r\n in the response which signals the start of the http payload (file)
unsigned char *filestart = NULL;
u32 filesize = 0;
int i;
for(i = 3; i < response.size; i++)
{
if(response.data[i] == '\n' &&
response.data[i-1] == '\r' &&
response.data[i-2] == '\n' &&
response.data[i-3] == '\r')
{
filestart = response.data + i + 1;
filesize = response.size - i - 1;
break;
}
}
if(filestart == NULL)
{
//printf("HTTP Response was without a file\n");
free(response.data);
return emptyblock;
}
//Copy the file part of the response into a new memoryblock to return
struct block file;
file.data = malloc(filesize);
file.size = filesize;
if(file.data == NULL)
{
//printf("No more memory to copy file from HTTP response\n");
free(response.data);
return emptyblock;
}
memcpy(file.data, filestart, filesize);
//Dispose of the original response
free(response.data);
return file;
}
s32 GetConnection(char * domain) {
u32 ipaddress = getipbynamecached(domain);
if(ipaddress == 0) {
return -1;
}
s32 connection = server_connect(ipaddress, 80);
return connection;
}

View File

@ -1,39 +0,0 @@
#ifndef _HTTP_H_
#define _HTTP_H_
#include <errno.h>
#include <network.h>
#include <ogcsys.h>
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#ifdef __cplusplus
extern "C"
{
#endif
#include "dns.h"
/**
* A simple structure to keep track of the size of a malloc()ated block of memory
*/
struct block
{
u32 size;
unsigned char *data;
};
extern const struct block emptyblock;
struct block downloadfile(const char *url);
s32 GetConnection(char * domain);
#ifdef __cplusplus
}
#endif
#endif /* _HTTP_H_ */

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1016 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 910 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 760 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 909 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Some files were not shown because too many files have changed in this diff Show More