*Removed ntfs/fat source and added them as custom libs (makes them easier to update later)

*Added sources of the custom libs to the branches
*Fixed crash when switching from list layout to grid/carousel layout
*Removed 1:1 copy option because its meaningless and almost the same as installing all partitions
*Fixed install partition selection. This option needs a reset. Go to settings and reselect your option for this.
*Fixed schinese and tchinese language modes (filename bugs. has to be schinese.lang and tchinese.lang like on SVN)
*Fixed bug in sound buffer circle
*Fixed incorrect behaviour of x-flip when selecting system like (thx Cyan for the patch)
*Accept ios revision 65535 for Waninkokos IOSes (thx to PPSainity for pointing it out)
*Merged the new theming style branch into trunk. Just as a reminder: ALL old themes will not work until the themers did port it to the new style!
*Removed old theme style completely

Theme example:
The example file of the theme is the Default.them file. It can be found in the SVN trunk.

Change in loading of themes:
When selecting a theme now a list of all .them files in a folder is displayed. The image folder of that theme has to be in the same folder as the .them file. The image path is defined in the head of the .them file in the line with "Image-Folder: Example\n".
This commit is contained in:
dimok321 2010-12-26 17:02:14 +00:00
parent c032697c5a
commit d62e41d601
188 changed files with 6512 additions and 72437 deletions

View File

@ -2,8 +2,8 @@
<app version="1">
<name> USB Loader GX</name>
<coder>USB Loader GX Team</coder>
<version>1.0 r1015</version>
<release_date>201012181321</release_date>
<version>1.0 r1018</version>
<release_date>201012212002</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.

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: David Jelinek (djelinek@hotmail.com) \n"
"Language-Team: r823 - last version on http://djelinek.sweb.cz/_USBLoderGX/czech.lang \n"
@ -25,54 +25,15 @@ msgstr " byl uložen. Soubor nebyl zkontrolován. Nekteré cásti kódu nemusí
msgid " is not on the server."
msgstr " není na serveru"
msgid "0 (Everyone)"
msgstr "0 (Každý)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Díte 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 hodina"
msgid "10 min"
msgstr "10 minut"
msgid "2 (Teen 12+)"
msgstr "2 (Mladistvý 12+)"
msgid "20 min"
msgstr "20 minut"
msgid "2D Cover Path"
msgstr "Cesta k 2D obalum"
msgid "3 (Mature 16+)"
msgstr "3 (Zralý 16+)"
msgid "3 min"
msgstr "3 minuty"
msgid "30 min"
msgstr "30 minut"
msgid "3D Cover Path"
msgstr "Cesta k 3D obalum"
msgid "3D Covers"
msgstr "3D Obaly"
msgid "4 (Adults Only 18+)"
msgstr "4 (Pouze dospelí 18+)"
msgid "5 min"
msgstr "5 minut"
msgid ">> Deleting tickets..."
msgstr ">> Odstraňuji tikety..."
@ -136,19 +97,13 @@ msgstr "Všechny možnosti USB Loader GX jsou odemceny"
msgid "Alternate DOL"
msgstr "Náhradní DOL"
msgid "An Error occured"
msgstr "Došlo k chybe"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Jazyk aplikace"
msgid "Apr"
msgstr "Dub"
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr "Autor:"
msgid "AutoInit Network"
msgstr "Automatický start síte"
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -199,9 +151,6 @@ msgstr ""
msgid "Boot?"
msgstr "Spustit?"
msgid "Both"
msgstr "Oboje"
msgid "Can't be formatted"
msgstr "Nelze naformátovat"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "Soubor s cheaty je prázdný"
msgid "Checking for Updates"
msgstr "Zjištuji dostupné aktualiazce"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "Konzole"
msgid "Console Default"
msgstr "Puvodní nastavení konzole"
msgid "Console Locked"
msgstr "Konzole uzamcena"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Nelze vytvorit GCT soubor"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Zásluhy"
msgid "Custom Paths"
msgstr "Vlastní cesty"
msgid "Customs/Original"
msgstr "Upravené/Originál"
msgid "DOL Path"
msgstr "Cesta k DOL"
@ -365,15 +309,9 @@ msgstr "Stažení potisku DVD"
msgid "Disc Artwork Path"
msgstr "Cesta k potiskum DVD"
msgid "Disc Default"
msgstr "Puvodní nastavení disku"
msgid "Disc Images"
msgstr "Potisky DVD"
msgid "DiskFlip"
msgstr ""
msgid "Display"
msgstr "Zobrazení"
@ -404,6 +342,9 @@ msgstr "Prejete si stáhnout toto téma?"
msgid "Do you want to format:"
msgstr "Prejete si formátovat"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Prejete si použít jiný DOL, který je správný?"
@ -434,26 +375,26 @@ msgstr "Stažení dokonceno"
msgid "Download request failed."
msgstr "Požadavek na stažení selhal."
msgid "Downloading"
msgstr "Stahování"
msgid "Downloading Page List:"
msgstr "Stahuji stránku seznamu:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Stahuji soubor"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Stahuji obrázek:"
msgid "Dutch"
msgstr "Dánsky"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "CHYBA"
@ -464,9 +405,6 @@ msgstr "CHYBA:"
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr "Anglicky"
msgid "Error"
msgstr "Chyba"
@ -476,15 +414,24 @@ msgstr "Chyba !"
msgid "Error 002 fix"
msgstr "Oprava chyby 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Nelze císt disk"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Chyba behem prenosu dat."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Nemohu rozbalit."
msgid "Failed to open partition"
msgstr "Nelze otevrít diskový oddíl"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Ún"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr ""
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formát"
@ -545,15 +486,9 @@ msgstr "Formátuji, cekejte prosím ..."
msgid "Free Space"
msgstr "Volné místo"
msgid "French"
msgstr "Francouzky"
msgid "Full Shutdown"
msgstr "Úplné vypnutí"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "Cesta pro cheat kódy"
@ -566,9 +501,6 @@ msgstr "Nastavení GUI"
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr "ID hry"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Nahrání hry"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Region hry"
msgid "Game Size"
msgstr "Velikost hry"
@ -599,18 +528,12 @@ msgstr "Hra je již nainstalována:"
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Hry"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Nemecky"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Vložte SD kartu pro tuto možnost"
msgid "Install"
msgstr "Instalace"
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr "Chyba pri instalaci"
@ -691,21 +611,12 @@ msgstr "Instaluji titul... Ok!"
msgid "Installing wad"
msgstr "Instaluji WAD"
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Zdá se, že máte informace, které by pro nás mohly být užitecné. Odešlete prosím tuto informaci na náš DEV tým."
msgid "Italian"
msgstr "Italsky"
msgid "Jan"
msgstr "Led"
msgid "Japanese"
msgstr "Japonsky"
msgid "July"
msgstr "Cervenec"
@ -718,9 +629,6 @@ msgstr "Držet"
msgid "Keyboard"
msgstr "Klávesnice"
msgid "Korean"
msgstr "Korejsky"
msgid "Language File"
msgstr "Jazykový soubor"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Cesta k jazykum zmenena"
msgid "Left"
msgstr "Vlevo"
msgid "Like SysMenu"
msgstr "Jako hlavní menu"
msgid "Load"
msgstr "Spustit"
msgid "Load From SD/USB"
msgstr "Nahrát z SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Nahrát soubor z: %s ?"
@ -752,6 +651,9 @@ msgstr "Nahrát soubor z: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Spustit tento DOL jako náhradní DOL?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Nahrávám puvodní jazyk"
@ -761,18 +663,9 @@ msgstr "Nahrávám puvodní hudbu"
msgid "Lock Console"
msgstr "Zamcení konzole"
msgid "Locked"
msgstr "Zamceno"
msgid "Loop Directory"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgstr "Zvuková smyčka"
msgid "Mar"
msgstr "Brez"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Hlasitost hudby"
msgid "Neither"
msgstr "Žádný"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Detekován nový disk"
msgid "Next"
msgstr "Další"
msgid "No"
msgstr "Ne"
@ -839,12 +729,6 @@ msgstr "Není dostupná žádná aktualizace."
msgid "No themes found on the site."
msgstr "Žádné téma nebylo nalezeno na serveru."
msgid "None"
msgstr ""
msgid "Normal"
msgstr "Normální"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "Vypnuto"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Zapnuto"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Oficiální místo:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Pouze Upravené"
msgid "Only Original"
msgstr "Pouze originál"
msgid "Only for Install"
msgstr "Pouze pro instalaci"
msgid "Original/Customs"
msgstr "Originál/Upravené"
msgid "Parental Control"
msgstr "Rodicovský zámek"
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr "Oddíl"
@ -947,9 +813,6 @@ msgstr "Spušteno"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "Cekejte prosím..."
msgid "Power off the Wii"
msgstr "Vypnout Wii"
msgid "Prev"
msgstr "Predchozí"
msgid "Prompts Buttons"
msgstr "Potvrzovací tlacítka"
@ -974,9 +834,6 @@ msgstr "Publikoval "
msgid "Quick Boot"
msgstr "Rychlé zavedení"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "Nacítám WAD data... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Návrat do Wii nabídky"
msgid "Right"
msgstr "Vpravo"
msgid "Rumble"
msgstr "Vibrace"
msgid "SChinese"
msgstr "Cínsky"
msgid "SFX Volume"
msgstr "Hlasitost SFX"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Vyberte DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Zárí"
@ -1085,15 +933,6 @@ msgstr "Zvuk"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Zvuk+BGM"
msgid "Sound+Quiet"
msgstr "Zvuk+ticho"
msgid "Spanish"
msgstr "Španelsky"
msgid "Special thanks to:"
msgstr "Speciální podekování pro"
@ -1121,24 +960,18 @@ msgstr "Úspešne rozbalené téma."
msgid "Successfully installed:"
msgstr "Úspešne nainstalováno"
msgid "System Default"
msgstr "Puvodní nastavení systému"
msgid "TChinese"
msgstr "Cínsky"
msgid "TXT Cheatcodes Path"
msgstr "Cesta k TXT cheatum"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Zadaný adresár neexistuje. Chcete ho vytvorit?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WAD soubor byl nainstalován, ale nelze smazat z SD karty"
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "Instalace WAD souboru selhala s chybou %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Cesta pro uložení témat"
@ -1152,6 +985,9 @@ msgstr "Cesta k tématum"
msgid "Theme Title:"
msgstr "Název tématu"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Prenos selhal"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB zarízení nenalezeno"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX je zabezpecen"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Nelze otevrít WAD, který byl nyní stažen (%s)."
msgid "Uninstall"
msgstr "Odinstalace"
@ -1201,15 +1039,12 @@ msgstr "Odinstalace WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Odemknete konzoli pro tuto akci."
msgid "Unlocked"
msgstr "Odemceno"
msgid "Unsupported format, try to extract manually."
msgstr "Nepodporovaný formát"
@ -1234,21 +1069,12 @@ msgstr "Zaktualizuj vsechny jazykové soubory"
msgid "Update failed"
msgstr "Aktualizace selhala"
msgid "Update to"
msgstr "Aktualizováno na"
msgid "Updating"
msgstr "Aktualizuji"
msgid "Updating Language Files..."
msgstr "Aktualizuji jazykové soubory..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Aktualizuji jazykové soubory:"
msgid "Updating WiiTDB.zip"
msgstr "Aktualizuji WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Odeslaný ZIP soubor nainstalován do adresáre homebrew"
@ -1280,9 +1106,6 @@ msgstr "Co si prejete zaktualizovat?"
msgid "WiFi Features"
msgstr "WiFi možnosti"
msgid "Widescreen Fix"
msgstr "Korekce širokoúhlé obrazovky"
msgid "Wii Menu"
msgstr "Wii menu"
@ -1310,9 +1133,6 @@ msgstr "Ano"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr ""
@ -1377,6 +1197,177 @@ msgstr "z "
msgid "seconds left"
msgstr "sekund zbývá"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Každý)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Díte 7+)"
#~ msgid "1 hour"
#~ msgstr "1 hodina"
#~ msgid "10 min"
#~ msgstr "10 minut"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Mladistvý 12+)"
#~ msgid "20 min"
#~ msgstr "20 minut"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Zralý 16+)"
#~ msgid "3 min"
#~ msgstr "3 minuty"
#~ msgid "30 min"
#~ msgstr "30 minut"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Pouze dospelí 18+)"
#~ msgid "5 min"
#~ msgstr "5 minut"
#~ msgid "An Error occured"
#~ msgstr "Došlo k chybe"
#~ msgid "Both"
#~ msgstr "Oboje"
#~ msgid "Checking for Updates"
#~ msgstr "Zjištuji dostupné aktualiazce"
#~ msgid "Console Default"
#~ msgstr "Puvodní nastavení konzole"
#~ msgid "Customs/Original"
#~ msgstr "Upravené/Originál"
#~ msgid "Disc Default"
#~ msgstr "Puvodní nastavení disku"
#~ msgid "Downloading"
#~ msgstr "Stahování"
#~ msgid "Dutch"
#~ msgstr "Dánsky"
#~ msgid "English"
#~ msgstr "Anglicky"
#~ msgid "French"
#~ msgstr "Francouzky"
#~ msgid "Game ID"
#~ msgstr "ID hry"
#~ msgid "Game Region"
#~ msgstr "Region hry"
#~ msgid "German"
#~ msgstr "Nemecky"
#~ msgid "Italian"
#~ msgstr "Italsky"
#~ msgid "Japanese"
#~ msgstr "Japonsky"
#~ msgid "Korean"
#~ msgstr "Korejsky"
#~ msgid "Left"
#~ msgstr "Vlevo"
#~ msgid "Like SysMenu"
#~ msgstr "Jako hlavní menu"
#~ msgid "Load From SD/USB"
#~ msgstr "Nahrát z SD/USB"
#~ msgid "Locked"
#~ msgstr "Zamceno"
#~ msgid "Loop Sound"
#~ msgstr "Zvuková smyčka"
#~ msgid "Neither"
#~ msgstr "Žádný"
#~ msgid "Next"
#~ msgstr "Další"
#~ msgid "Normal"
#~ msgstr "Normální"
#~ msgid "ON"
#~ msgstr "Zapnuto"
#~ msgid "Only Customs"
#~ msgstr "Pouze Upravené"
#~ msgid "Only Original"
#~ msgstr "Pouze originál"
#~ msgid "Only for Install"
#~ msgstr "Pouze pro instalaci"
#~ msgid "Original/Customs"
#~ msgstr "Originál/Upravené"
#~ msgid "Prev"
#~ msgstr "Predchozí"
#~ msgid "Right"
#~ msgstr "Vpravo"
#~ msgid "SChinese"
#~ msgstr "Cínsky"
#~ msgid "Sound+BGM"
#~ msgstr "Zvuk+BGM"
#~ msgid "Sound+Quiet"
#~ msgstr "Zvuk+ticho"
#~ msgid "Spanish"
#~ msgstr "Španelsky"
#~ msgid "System Default"
#~ msgstr "Puvodní nastavení systému"
#~ msgid "TChinese"
#~ msgstr "Cínsky"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WAD soubor byl nainstalován, ale nelze smazat z SD karty"
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "Instalace WAD souboru selhala s chybou %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Nelze otevrít WAD, který byl nyní stažen (%s)."
#~ msgid "Unlocked"
#~ msgstr "Odemceno"
#~ msgid "Update to"
#~ msgstr "Aktualizováno na"
#~ msgid "Updating"
#~ msgstr "Aktualizuji"
#~ msgid "Updating Language Files..."
#~ msgstr "Aktualizuji jazykové soubory..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Aktualizuji WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Korekce širokoúhlé obrazovky"
#~ msgid "Back to Wii Menu"
#~ msgstr "Zpet do Wii nabídky"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: dorf[dk]\n"
"Language-Team: dorf[dk]\n"
@ -25,54 +25,15 @@ msgstr " er blevet gemt. Koderne er ikke blevet kontrolleret. Nogle af koderne v
msgid " is not on the server."
msgstr " er ikke på serveren."
msgid "0 (Everyone)"
msgstr "0 (Alle)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Børn 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 time"
msgid "10 min"
msgstr "10 min."
msgid "2 (Teen 12+)"
msgstr "2 (Unge teenagere 12+)"
msgid "20 min"
msgstr "20 min."
msgid "2D Cover Path"
msgstr "Sti til 2-d covers"
msgid "3 (Mature 16+)"
msgstr "3 (Modne teenagere 16+)"
msgid "3 min"
msgstr "3 min."
msgid "30 min"
msgstr "30 min."
msgid "3D Cover Path"
msgstr "Sti til 3-d covers"
msgid "3D Covers"
msgstr "3D-Covers"
msgid "4 (Adults Only 18+)"
msgstr "4 (Voksne 18+)"
msgid "5 min"
msgstr "5 min."
msgid ">> Deleting tickets..."
msgstr ">> Sletter tickets..."
@ -136,20 +97,14 @@ msgstr "Alle USB Loader GX's funktioner er låst op."
msgid "Alternate DOL"
msgstr "Alternativ DOL"
msgid "An Error occured"
msgstr "Der skete en fejl"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Programsprog"
msgid "Apr"
msgstr ""
msgid "Are you sure you want to enable Parent Control?"
msgstr "Skal børnelåsen slås til?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Forfatter:"
msgid "AutoInit Network"
msgstr "AutoInit net"
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr "Sti til BCA koder"
@ -199,9 +151,6 @@ msgstr ""
msgid "Boot?"
msgstr "Genstart?"
msgid "Both"
msgstr "Begge"
msgid "Can't be formatted"
msgstr "Kan ikke formatteres"
@ -226,9 +175,6 @@ msgstr "Ændre sti til musik"
msgid "Cheatfile is blank"
msgstr "Cheatfilen er tom"
msgid "Checking for Updates"
msgstr "Leder efter opdateringer"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Forbindelsen er væk..."
msgid "Console"
msgstr "Konsol"
msgid "Console Default"
msgstr "Konsol-standard"
msgid "Console Locked"
msgstr "Konsollen er låst"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Kunne ikke oprette GCT-fil"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Lavet af:"
msgid "Custom Paths"
msgstr "Sti-indstillinger"
msgid "Customs/Original"
msgstr "Tilpassede/Originale"
msgid "DOL Path"
msgstr "Stil til DOL"
@ -365,15 +309,9 @@ msgstr "Download DVD-billeder"
msgid "Disc Artwork Path"
msgstr "Sti til DVD-billeder"
msgid "Disc Default"
msgstr "Spillets standard"
msgid "Disc Images"
msgstr "DVD-billeder"
msgid "DiskFlip"
msgstr ""
msgid "Display"
msgstr "Spilinfo."
@ -404,6 +342,9 @@ msgstr "Skal dette tema downloades?"
msgid "Do you want to format:"
msgstr "Vil du formatere:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Skal den alternative DOL, der med sikkerhed er korrekt, bruges?"
@ -434,26 +375,26 @@ msgstr "Download færdig"
msgid "Download request failed."
msgstr "Anmodning om download mislykkedes."
msgid "Downloading"
msgstr "Downloader"
msgid "Downloading Page List:"
msgstr "Downloader side:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Downloader fil"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Downloader billede:"
msgid "Dutch"
msgstr "Hollandsk"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "FEJL"
@ -464,9 +405,6 @@ msgstr "FEJL:"
msgid "ERROR: Can't set up theme."
msgstr "FEJL: Temaet kan ikke bruges."
msgid "English"
msgstr "Engelsk"
msgid "Error"
msgstr "Fejl"
@ -476,15 +414,24 @@ msgstr "Fejl!"
msgid "Error 002 fix"
msgstr "Error 002 fix"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "DVDen kunne ikke læses"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Fejl under overførsel af data."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Udpakningen mislykkedes."
msgid "Failed to open partition"
msgstr "Kunne ikke åbne partition"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr ""
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr ""
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formater"
@ -545,15 +486,9 @@ msgstr "Formaterer, vent venligst..."
msgid "Free Space"
msgstr "Ledig plads"
msgid "French"
msgstr "Fransk"
msgid "Full Shutdown"
msgstr "Sluk helt"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "Sti til cheatcodes"
@ -566,9 +501,6 @@ msgstr "Konfigurér GUI"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg blev ikke fundet i nogle undermapper"
msgid "Game ID"
msgstr "Spil-ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Spilindstillinger"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Region"
msgid "Game Size"
msgstr "Spilstørrelse"
@ -599,18 +528,12 @@ msgstr "Dette spil er allerede installeret:"
msgid "Game partition"
msgstr "Spilpartition"
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Spil"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Tysk"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Indsæt et SD-kort for at bruge denne indstilling."
msgid "Install"
msgstr "Installér"
msgid "Install 1:1 Copy"
msgstr "Installér 1:1-kopi"
msgid "Install Error!"
msgstr "Installationsfejl!"
@ -691,21 +611,12 @@ msgstr "Installerer titel... Ok!"
msgid "Installing wad"
msgstr "Installerer WAD"
msgid "Invalid PIN code"
msgstr "Forkert PIN-kode"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Det ser ud til, at du har information, der vil kunne hjælpe os. Vær rar at sende denne information til udviklerne."
msgid "Italian"
msgstr "Italiensk"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japansk"
msgid "July"
msgstr "Juli"
@ -718,9 +629,6 @@ msgstr "Behold"
msgid "Keyboard"
msgstr "Tastatur"
msgid "Korean"
msgstr "Koreansk"
msgid "Language File"
msgstr "Sprog Fil"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Sti til sprogfiler ændret."
msgid "Left"
msgstr "Venstre"
msgid "Like SysMenu"
msgstr "Ligesom wii-menuen"
msgid "Load"
msgstr "Indlæs"
msgid "Load From SD/USB"
msgstr "Indlæs fra SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Indlæs fil fra %s ?"
@ -752,6 +651,9 @@ msgstr "Indlæs fil fra %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Indlæs denne DOL som alternativ DOL?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Indlæser standardsprog."
@ -761,17 +663,8 @@ msgstr "Indlæser standardmusik."
msgid "Lock Console"
msgstr "Lås konsol"
msgid "Locked"
msgstr "Låst"
msgid "Loop Directory"
msgstr "Afspil mappe i løkke"
msgid "Loop Music"
msgstr "Afspil musik i løkke"
msgid "Loop Sound"
msgstr "Afspil lyd i løkke"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr ""
@ -794,15 +687,12 @@ msgstr "Musik i løkke"
msgid "Music Volume"
msgstr "Lydstyrke"
msgid "Neither"
msgstr "Ingen"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Har opdaget ny DVD"
msgid "Next"
msgstr "Næste"
msgid "No"
msgstr "Nej"
@ -839,12 +729,6 @@ msgstr "Ingen nye opdateringer."
msgid "No themes found on the site."
msgstr "Der blev ikke fundet nogle temaer på denne site."
msgid "None"
msgstr "Ingen"
msgid "Normal"
msgstr "Normal"
msgid "Not a WAD file."
msgstr "Ikke en WAD-fil."
@ -884,9 +768,6 @@ msgstr "Fra"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Til"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Officiel side:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Kun tilpassede"
msgid "Only Original"
msgstr "Kun originaler"
msgid "Only for Install"
msgstr "Kun til installering"
msgid "Original/Customs"
msgstr "Originale/Tilpassede"
msgid "Parental Control"
msgstr "Børnelås"
msgid "Parental Control disabled"
msgstr "Børnelåsen er slået fra"
msgid "Partition"
msgstr "Partition"
@ -947,9 +813,6 @@ msgstr "Spiltæller"
msgid "Play Next"
msgstr "Afspil næste"
msgid "Play Once"
msgstr "Afspil én gang"
msgid "Play Previous"
msgstr "Afspil forrige"
@ -962,9 +825,6 @@ msgstr "Vent venligst..."
msgid "Power off the Wii"
msgstr "Sluk Wiien"
msgid "Prev"
msgstr "Forrige"
msgid "Prompts Buttons"
msgstr "Knaptekster"
@ -974,9 +834,6 @@ msgstr "Udgivet af"
msgid "Quick Boot"
msgstr "Hurtig opstart"
msgid "Random Directory Music"
msgstr "Musik fra tilfældig mappe"
msgid "Reading WAD data... Ok!"
msgstr "Læser WAD-data... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Tilbage til Wii-menuen"
msgid "Right"
msgstr "Højre"
msgid "Rumble"
msgstr "Vibration"
msgid "SChinese"
msgstr "Kinesisk (std.)"
msgid "SFX Volume"
msgstr "Lydstyrke for effekter"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Vælg en DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr ""
@ -1085,15 +933,6 @@ msgstr "Lyd"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Lyd+BGM"
msgid "Sound+Quiet"
msgstr "Lyd+Stille"
msgid "Spanish"
msgstr "Spansk"
msgid "Special thanks to:"
msgstr "Specielt tak til:"
@ -1121,24 +960,18 @@ msgstr "Udpakning af tema lykkedes."
msgid "Successfully installed:"
msgstr "Installationen lykkedes:"
msgid "System Default"
msgstr "System-standard"
msgid "TChinese"
msgstr "Kinesisk (trad.)"
msgid "TXT Cheatcodes Path"
msgstr "Sti til TXTCheatcodes"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Den angivne mappe eksisterer ikke. Skal den oprettes?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WAD-filen blev installeret. Den kunne ikke slettes fra SD-kortet."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "WAD-installationen mislykkedes med fejl %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Sti til download af temaer"
@ -1152,6 +985,9 @@ msgstr "Sti til temaer"
msgid "Theme Title:"
msgstr "Tematitel:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Overførslen mislykkedes"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB-enhed ikke fundet"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX er beskyttet"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Ikke i stand til at åbne den WAD, der blev downloadet (%s)."
msgid "Uninstall"
msgstr "Afinstallér"
@ -1201,15 +1039,12 @@ msgstr "Afinstallerer WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Lås børnelåsen op"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Lås op for konsollen for at benytte denne indstilling."
msgid "Unlocked"
msgstr "Låst op"
msgid "Unsupported format, try to extract manually."
msgstr "Formatet er ikke understøttet - prøv at udpakke manuelt."
@ -1234,21 +1069,12 @@ msgstr "Opdatér alle sprogfiler"
msgid "Update failed"
msgstr "Opdateringen mislykkedes"
msgid "Update to"
msgstr "Opdatér til"
msgid "Updating"
msgstr "Opdaterer..."
msgid "Updating Language Files..."
msgstr "Opdaterer sprogfiler..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Opdaterer sprogfiler:"
msgid "Updating WiiTDB.zip"
msgstr "Opdaterer WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Den uploadede ZIP-fil er installeret i homebrew-mappen."
@ -1280,9 +1106,6 @@ msgstr "Hvad skal opdateres?"
msgid "WiFi Features"
msgstr "WiFi-indstillinger"
msgid "Widescreen Fix"
msgstr "Bredformat-fix"
msgid "Wii Menu"
msgstr ""
@ -1310,9 +1133,6 @@ msgstr "Ja"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Børnelåsen er ikke slået til. Hvis børnelåsen skal bruges, skal den slås til i Wiiens indstillinger."
msgid "You need to select or format a partition"
msgstr "Du skal vælge eller formattere en partition"
@ -1377,6 +1197,210 @@ msgstr "af"
msgid "seconds left"
msgstr "sekunder tilbage"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Installér 1:1-kopi"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Alle)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Børn 7+)"
#~ msgid "1 hour"
#~ msgstr "1 time"
#~ msgid "10 min"
#~ msgstr "10 min."
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Unge teenagere 12+)"
#~ msgid "20 min"
#~ msgstr "20 min."
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Modne teenagere 16+)"
#~ msgid "3 min"
#~ msgstr "3 min."
#~ msgid "30 min"
#~ msgstr "30 min."
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Voksne 18+)"
#~ msgid "5 min"
#~ msgstr "5 min."
#~ msgid "An Error occured"
#~ msgstr "Der skete en fejl"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Skal børnelåsen slås til?"
#~ msgid "Both"
#~ msgstr "Begge"
#~ msgid "Checking for Updates"
#~ msgstr "Leder efter opdateringer"
#~ msgid "Console Default"
#~ msgstr "Konsol-standard"
#~ msgid "Customs/Original"
#~ msgstr "Tilpassede/Originale"
#~ msgid "Disc Default"
#~ msgstr "Spillets standard"
#~ msgid "Downloading"
#~ msgstr "Downloader"
#~ msgid "Dutch"
#~ msgstr "Hollandsk"
#~ msgid "English"
#~ msgstr "Engelsk"
#~ msgid "French"
#~ msgstr "Fransk"
#~ msgid "Game ID"
#~ msgstr "Spil-ID"
#~ msgid "Game Region"
#~ msgstr "Region"
#~ msgid "German"
#~ msgstr "Tysk"
#~ msgid "Invalid PIN code"
#~ msgstr "Forkert PIN-kode"
#~ msgid "Italian"
#~ msgstr "Italiensk"
#~ msgid "Japanese"
#~ msgstr "Japansk"
#~ msgid "Korean"
#~ msgstr "Koreansk"
#~ msgid "Left"
#~ msgstr "Venstre"
#~ msgid "Like SysMenu"
#~ msgstr "Ligesom wii-menuen"
#~ msgid "Load From SD/USB"
#~ msgstr "Indlæs fra SD/USB"
#~ msgid "Locked"
#~ msgstr "Låst"
#~ msgid "Loop Directory"
#~ msgstr "Afspil mappe i løkke"
#~ msgid "Loop Music"
#~ msgstr "Afspil musik i løkke"
#~ msgid "Loop Sound"
#~ msgstr "Afspil lyd i løkke"
#~ msgid "Neither"
#~ msgstr "Ingen"
#~ msgid "Next"
#~ msgstr "Næste"
#~ msgid "None"
#~ msgstr "Ingen"
#~ msgid "Normal"
#~ msgstr "Normal"
#~ msgid "ON"
#~ msgstr "Til"
#~ msgid "Only Customs"
#~ msgstr "Kun tilpassede"
#~ msgid "Only Original"
#~ msgstr "Kun originaler"
#~ msgid "Only for Install"
#~ msgstr "Kun til installering"
#~ msgid "Original/Customs"
#~ msgstr "Originale/Tilpassede"
#~ msgid "Parental Control disabled"
#~ msgstr "Børnelåsen er slået fra"
#~ msgid "Play Once"
#~ msgstr "Afspil én gang"
#~ msgid "Prev"
#~ msgstr "Forrige"
#~ msgid "Random Directory Music"
#~ msgstr "Musik fra tilfældig mappe"
#~ msgid "Right"
#~ msgstr "Højre"
#~ msgid "SChinese"
#~ msgstr "Kinesisk (std.)"
#~ msgid "Sound+BGM"
#~ msgstr "Lyd+BGM"
#~ msgid "Sound+Quiet"
#~ msgstr "Lyd+Stille"
#~ msgid "Spanish"
#~ msgstr "Spansk"
#~ msgid "System Default"
#~ msgstr "System-standard"
#~ msgid "TChinese"
#~ msgstr "Kinesisk (trad.)"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WAD-filen blev installeret. Den kunne ikke slettes fra SD-kortet."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "WAD-installationen mislykkedes med fejl %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Ikke i stand til at åbne den WAD, der blev downloadet (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Lås børnelåsen op"
#~ msgid "Unlocked"
#~ msgstr "Låst op"
#~ msgid "Update to"
#~ msgstr "Opdatér til"
#~ msgid "Updating"
#~ msgstr "Opdaterer..."
#~ msgid "Updating Language Files..."
#~ msgstr "Opdaterer sprogfiler..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Opdaterer WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Bredformat-fix"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Børnelåsen er ikke slået til. Hvis børnelåsen skal bruges, skal den slås til i Wiiens indstillinger."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s booter måske ikke korrekt, hvis system menuen ikke er opdateret."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2010-04-12 07:37+0100\n"
"Last-Translator: glowy\n"
"Language-Team: tj_cool, glowy\n"
@ -25,54 +25,15 @@ msgstr " is opgeslagen. De tekst is niet gecontroleerd. Delen van de code kunnen
msgid " is not on the server."
msgstr " staat niet op de server."
msgid "0 (Everyone)"
msgstr "0 (Iedereen 3+)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Kinderen 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 uur"
msgid "10 min"
msgstr ""
msgid "2 (Teen 12+)"
msgstr "2 (Tiener 12+)"
msgid "20 min"
msgstr ""
msgid "2D Cover Path"
msgstr "Locatie 2D hoesjes"
msgid "3 (Mature 16+)"
msgstr "3 (Adolescenten 16+)"
msgid "3 min"
msgstr ""
msgid "30 min"
msgstr ""
msgid "3D Cover Path"
msgstr "Locatie 3D hoesjes"
msgid "3D Covers"
msgstr "3D Hoesjes"
msgid "4 (Adults Only 18+)"
msgstr "4 (Volwassen 18+)"
msgid "5 min"
msgstr ""
msgid ">> Deleting tickets..."
msgstr ">> Tickets verwijderen..."
@ -136,20 +97,14 @@ msgstr "Alle functies van USB Loader GX zijn vrijgegeven."
msgid "Alternate DOL"
msgstr "Alternatieve DOL"
msgid "An Error occured"
msgstr "Er is een fout opgetreden"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Applicatie Taal"
msgid "Apr"
msgstr ""
msgid "Are you sure you want to enable Parent Control?"
msgstr "Weet je zeker dat je ouderlijk toezicht wilt aanzetten?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Auteur:"
msgid "AutoInit Network"
msgstr "Netwerk Auto init."
msgid "AutoPatch"
msgstr "Automatisch patchen"
msgid "BCA Codes Path"
msgstr "Locatie BCA codes"
@ -199,9 +151,6 @@ msgstr "Start/Standaard"
msgid "Boot?"
msgstr "Start?"
msgid "Both"
msgstr "Beide"
msgid "Can't be formatted"
msgstr "Kan niet geformatteerd worden"
@ -226,9 +175,6 @@ msgstr "Verander afspeel locatie"
msgid "Cheatfile is blank"
msgstr "Cheatbestand is leeg"
msgid "Checking for Updates"
msgstr "Controleren op updates"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Verbinding verbroken..."
msgid "Console"
msgstr ""
msgid "Console Default"
msgstr "Console standaard"
msgid "Console Locked"
msgstr "Console vergrendeld"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Kan GCT bestand niet aanmaken"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr ""
msgid "Custom Paths"
msgstr "Bestandslocaties"
msgid "Customs/Original"
msgstr "Aangepast/Origineel"
msgid "DOL Path"
msgstr "Locatie DOL"
@ -365,15 +309,9 @@ msgstr "Download disk labels"
msgid "Disc Artwork Path"
msgstr "Locatie disk labels"
msgid "Disc Default"
msgstr "Disk standaard"
msgid "Disc Images"
msgstr "Disk labels"
msgid "DiskFlip"
msgstr ""
msgid "Display"
msgstr "Tonen"
@ -404,6 +342,9 @@ msgstr "Wil je dit thema downloaden?"
msgid "Do you want to format:"
msgstr "Wil je formatteren:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Wil je de alt DOL gebruiken waarvan is bevestigd dat deze werkt?"
@ -434,26 +375,26 @@ msgstr "Download voltooid"
msgid "Download request failed."
msgstr "Download aanvraag mislukt."
msgid "Downloading"
msgstr "Downloaden"
msgid "Downloading Page List:"
msgstr "Download pagina lijst:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Bestand downloaden"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Afbeelding downloaden:"
msgid "Dutch"
msgstr "Nederlands"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "FOUT"
@ -464,9 +405,6 @@ msgstr "FOUT:"
msgid "ERROR: Can't set up theme."
msgstr "FOUT: Kan thema niet instellen"
msgid "English"
msgstr "Engels"
msgid "Error"
msgstr "Fout"
@ -476,15 +414,24 @@ msgstr "Fout !"
msgid "Error 002 fix"
msgstr "Herstel fout 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Fout bij lezen disk"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Fout bij overplaatsen van data."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Uitpakken mislukt."
msgid "Failed to open partition"
msgstr "Partitie openen mislukt"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr ""
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "X omwisselen"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatteer"
@ -545,15 +486,9 @@ msgstr "Bezig met formatteren..."
msgid "Free Space"
msgstr "Vrije ruimte"
msgid "French"
msgstr "Frans"
msgid "Full Shutdown"
msgstr "Volledig uitzetten"
msgid "GAMEID_Gamename"
msgstr "SPELID_Spelnaam"
msgid "GCT Cheatcodes Path"
msgstr "Locatie GCT cheatcodes"
@ -566,9 +501,6 @@ msgstr "Menu opties"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg in geen enkele submap gevonden."
msgid "Game ID"
msgstr "Spel ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Spel opties"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Spel Regio"
msgid "Game Size"
msgstr "Spel grootte"
@ -599,18 +528,12 @@ msgstr "Spel is al geïnstalleerd:"
msgid "Game partition"
msgstr "Spel partitie"
msgid "Gamename [GAMEID]"
msgstr "Spelnaam [SPELID]"
msgid "Games"
msgstr "Spellen"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Duits"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Voer een SD kaart in om deze optie te gebruiken."
msgid "Install"
msgstr "Installeer"
msgid "Install 1:1 Copy"
msgstr "Installeer 1:1 kopie"
msgid "Install Error!"
msgstr "Installatiefout!"
@ -691,21 +611,12 @@ msgstr "Titel installeren... Ok!"
msgid "Installing wad"
msgstr "Wad installeren"
msgid "Invalid PIN code"
msgstr "Onjuiste PIN code"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Je hebt informatie gevonden die ons kan helpen. Geeft u alstublieft deze info door aan ons ontwikkelingsteam."
msgid "Italian"
msgstr "Italiaans"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japans"
msgid "July"
msgstr "Jul"
@ -718,9 +629,6 @@ msgstr "Bijhouden"
msgid "Keyboard"
msgstr "Toetsenbord"
msgid "Korean"
msgstr "Koreaans"
msgid "Language File"
msgstr "Taal bestand"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Locatie taal gewijzigd."
msgid "Left"
msgstr "Links"
msgid "Like SysMenu"
msgstr "Als SysteemMenu"
msgid "Load"
msgstr "Laad"
msgid "Load From SD/USB"
msgstr "Laden van SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Laad bestand van %s ?"
@ -752,6 +651,9 @@ msgstr "Laad bestand van %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Deze DOL als alt DOL gebruiken?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Standaardtaal laden."
@ -761,17 +663,8 @@ msgstr "Standaardmuziek laden."
msgid "Lock Console"
msgstr "Console vergrendelen"
msgid "Locked"
msgstr "Vergrendeld"
msgid "Loop Directory"
msgstr "Herhaal Map"
msgid "Loop Music"
msgstr "Herhaal Muziek"
msgid "Loop Sound"
msgstr "Geluid herhalen"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr "Mrt"
@ -794,15 +687,12 @@ msgstr "Muziek Herhaal Mode"
msgid "Music Volume"
msgstr "Muziekvolume"
msgid "Neither"
msgstr "Geen"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Nieuwe disk gevonden"
msgid "Next"
msgstr "Volgende"
msgid "No"
msgstr "Nee"
@ -839,12 +729,6 @@ msgstr "Geen nieuwe updates."
msgid "No themes found on the site."
msgstr "Geen thema's gevonden op de site."
msgid "None"
msgstr "Geen"
msgid "Normal"
msgstr "Normaal"
msgid "Not a WAD file."
msgstr "Geen WAD bestand."
@ -884,9 +768,6 @@ msgstr "Uit"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Aan"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Officiële site:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Enkel aangepast"
msgid "Only Original"
msgstr "Enkel origineel"
msgid "Only for Install"
msgstr "Alleen bij installeren"
msgid "Original/Customs"
msgstr "Origineel/Aangepast"
msgid "Parental Control"
msgstr "Ouderlijk toezicht"
msgid "Parental Control disabled"
msgstr "Ouderlijk toezicht uitgeschakeld"
msgid "Partition"
msgstr "Partitie"
@ -947,9 +813,6 @@ msgstr "Gespeeld"
msgid "Play Next"
msgstr "Speel Volgende"
msgid "Play Once"
msgstr "Speel één maal"
msgid "Play Previous"
msgstr "Speel Vorige"
@ -962,9 +825,6 @@ msgstr "Even geduld..."
msgid "Power off the Wii"
msgstr "Wii uitschakelen"
msgid "Prev"
msgstr "Vorige"
msgid "Prompts Buttons"
msgstr "Weergave knoppen"
@ -974,9 +834,6 @@ msgstr "Uitgegeven door"
msgid "Quick Boot"
msgstr "Snelle start"
msgid "Random Directory Music"
msgstr "Willekeurige Map Muziek"
msgid "Reading WAD data... Ok!"
msgstr "WAD data lezen... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Terug naar Wii menu"
msgid "Right"
msgstr "Rechts"
msgid "Rumble"
msgstr "Trilfunctie"
msgid "SChinese"
msgstr "SChinees"
msgid "SFX Volume"
msgstr "Volume geluidseffecten"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Kies een DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Sep"
@ -1085,15 +933,6 @@ msgstr "Geluid"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Geluid+Achtergrondmuziek"
msgid "Sound+Quiet"
msgstr "Geluid+Stilte"
msgid "Spanish"
msgstr "Spaans"
msgid "Special thanks to:"
msgstr "Speciale dank aan:"
@ -1121,24 +960,18 @@ msgstr "Thema succesvol uitgepakt."
msgid "Successfully installed:"
msgstr "Met succes geïnstalleerd:"
msgid "System Default"
msgstr "Systeem standaard"
msgid "TChinese"
msgstr "Chinees Trad."
msgid "TXT Cheatcodes Path"
msgstr "Locatie TXT cheats"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "De opgegeven map bestaat niet. Wil je deze aanmaken?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "Het wad bestand is geïnstalleerd. Maar kon niet van de SD kaart verwijderd worden."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "De wad installatie is mislukt met fout %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Thema download locatie"
@ -1152,6 +985,9 @@ msgstr "Locatie thema"
msgid "Theme Title:"
msgstr "Thema Titel:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Overdracht mislukt."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB Apparaat niet gevonden"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX is vergrendeld"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Wad is gedownload maar kan niet worden geopend (%s)."
msgid "Uninstall"
msgstr "Verwijderen"
@ -1201,15 +1039,12 @@ msgstr "Wad verwijderen"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Ontgrendel ouderlijk toezicht"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Console moet worden vrijgegeven."
msgid "Unlocked"
msgstr "Vrijgegeven"
msgid "Unsupported format, try to extract manually."
msgstr "Niet ondersteund formaat, probeer handmatig uit te pakken."
@ -1234,21 +1069,12 @@ msgstr "Alle taalbestanden updaten"
msgid "Update failed"
msgstr "Update mislukt"
msgid "Update to"
msgstr "Updaten naar"
msgid "Updating"
msgstr "Updaten"
msgid "Updating Language Files..."
msgstr "Taalbestanden updaten..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Taalbestanden updaten:"
msgid "Updating WiiTDB.zip"
msgstr "WiiTDB.zip updaten"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Geuploade ZIP is geïnstalleerd in je homebrew locatie."
@ -1280,9 +1106,6 @@ msgstr "Wat wil je updaten?"
msgid "WiFi Features"
msgstr "WiFi functies"
msgid "Widescreen Fix"
msgstr "Breedbeeld"
msgid "Wii Menu"
msgstr ""
@ -1310,9 +1133,6 @@ msgstr "Ja"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Je hebt ouderlijk toezicht niet ingeschakeld. Als je ouderlijk toezicht wilt gebruiken, zet het dan aan in de Wii instellingen."
msgid "You need to select or format a partition"
msgstr "Je moet een partitie selecteren of formatteren"
@ -1377,6 +1197,204 @@ msgstr "van"
msgid "seconds left"
msgstr "seconden over"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Installeer 1:1 kopie"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Iedereen 3+)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Kinderen 7+)"
#~ msgid "1 hour"
#~ msgstr "1 uur"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Tiener 12+)"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Adolescenten 16+)"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Volwassen 18+)"
#~ msgid "An Error occured"
#~ msgstr "Er is een fout opgetreden"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Weet je zeker dat je ouderlijk toezicht wilt aanzetten?"
#~ msgid "AutoPatch"
#~ msgstr "Automatisch patchen"
#~ msgid "Both"
#~ msgstr "Beide"
#~ msgid "Checking for Updates"
#~ msgstr "Controleren op updates"
#~ msgid "Console Default"
#~ msgstr "Console standaard"
#~ msgid "Customs/Original"
#~ msgstr "Aangepast/Origineel"
#~ msgid "Disc Default"
#~ msgstr "Disk standaard"
#~ msgid "Downloading"
#~ msgstr "Downloaden"
#~ msgid "Dutch"
#~ msgstr "Nederlands"
#~ msgid "English"
#~ msgstr "Engels"
#~ msgid "French"
#~ msgstr "Frans"
#~ msgid "GAMEID_Gamename"
#~ msgstr "SPELID_Spelnaam"
#~ msgid "Game ID"
#~ msgstr "Spel ID"
#~ msgid "Game Region"
#~ msgstr "Spel Regio"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "Spelnaam [SPELID]"
#~ msgid "German"
#~ msgstr "Duits"
#~ msgid "Invalid PIN code"
#~ msgstr "Onjuiste PIN code"
#~ msgid "Italian"
#~ msgstr "Italiaans"
#~ msgid "Japanese"
#~ msgstr "Japans"
#~ msgid "Korean"
#~ msgstr "Koreaans"
#~ msgid "Left"
#~ msgstr "Links"
#~ msgid "Like SysMenu"
#~ msgstr "Als SysteemMenu"
#~ msgid "Load From SD/USB"
#~ msgstr "Laden van SD/USB"
#~ msgid "Locked"
#~ msgstr "Vergrendeld"
#~ msgid "Loop Directory"
#~ msgstr "Herhaal Map"
#~ msgid "Loop Music"
#~ msgstr "Herhaal Muziek"
#~ msgid "Loop Sound"
#~ msgstr "Geluid herhalen"
#~ msgid "Neither"
#~ msgstr "Geen"
#~ msgid "Next"
#~ msgstr "Volgende"
#~ msgid "None"
#~ msgstr "Geen"
#~ msgid "Normal"
#~ msgstr "Normaal"
#~ msgid "ON"
#~ msgstr "Aan"
#~ msgid "Only Customs"
#~ msgstr "Enkel aangepast"
#~ msgid "Only Original"
#~ msgstr "Enkel origineel"
#~ msgid "Only for Install"
#~ msgstr "Alleen bij installeren"
#~ msgid "Original/Customs"
#~ msgstr "Origineel/Aangepast"
#~ msgid "Parental Control disabled"
#~ msgstr "Ouderlijk toezicht uitgeschakeld"
#~ msgid "Play Once"
#~ msgstr "Speel één maal"
#~ msgid "Prev"
#~ msgstr "Vorige"
#~ msgid "Random Directory Music"
#~ msgstr "Willekeurige Map Muziek"
#~ msgid "Right"
#~ msgstr "Rechts"
#~ msgid "SChinese"
#~ msgstr "SChinees"
#~ msgid "Sound+BGM"
#~ msgstr "Geluid+Achtergrondmuziek"
#~ msgid "Sound+Quiet"
#~ msgstr "Geluid+Stilte"
#~ msgid "Spanish"
#~ msgstr "Spaans"
#~ msgid "System Default"
#~ msgstr "Systeem standaard"
#~ msgid "TChinese"
#~ msgstr "Chinees Trad."
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "Het wad bestand is geïnstalleerd. Maar kon niet van de SD kaart verwijderd worden."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "De wad installatie is mislukt met fout %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Wad is gedownload maar kan niet worden geopend (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Ontgrendel ouderlijk toezicht"
#~ msgid "Unlocked"
#~ msgstr "Vrijgegeven"
#~ msgid "Update to"
#~ msgstr "Updaten naar"
#~ msgid "Updating"
#~ msgstr "Updaten"
#~ msgid "Updating Language Files..."
#~ msgstr "Taalbestanden updaten..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "WiiTDB.zip updaten"
#~ msgid "Widescreen Fix"
#~ msgstr "Breedbeeld"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Je hebt ouderlijk toezicht niet ingeschakeld. Als je ouderlijk toezicht wilt gebruiken, zet het dan aan in de Wii instellingen."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Kan mogelijk niet goed opstarten als je Systeem Menu niet up to date is."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -25,54 +25,15 @@ msgstr ""
msgid " is not on the server."
msgstr ""
msgid "0 (Everyone)"
msgstr ""
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr ""
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr ""
msgid "10 min"
msgstr ""
msgid "2 (Teen 12+)"
msgstr ""
msgid "20 min"
msgstr ""
msgid "2D Cover Path"
msgstr ""
msgid "3 (Mature 16+)"
msgstr ""
msgid "3 min"
msgstr ""
msgid "30 min"
msgstr ""
msgid "3D Cover Path"
msgstr ""
msgid "3D Covers"
msgstr ""
msgid "4 (Adults Only 18+)"
msgstr ""
msgid "5 min"
msgstr ""
msgid ">> Deleting tickets..."
msgstr ""
@ -136,19 +97,13 @@ msgstr ""
msgid "Alternate DOL"
msgstr ""
msgid "An Error occured"
msgstr ""
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr ""
msgid "Apr"
msgstr ""
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr ""
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -199,9 +151,6 @@ msgstr ""
msgid "Boot?"
msgstr ""
msgid "Both"
msgstr ""
msgid "Can't be formatted"
msgstr ""
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr ""
msgid "Checking for Updates"
msgstr ""
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr ""
msgid "Console Default"
msgstr ""
msgid "Console Locked"
msgstr ""
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr ""
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr ""
msgid "Custom Paths"
msgstr ""
msgid "Customs/Original"
msgstr ""
msgid "DOL Path"
msgstr ""
@ -365,15 +309,9 @@ msgstr ""
msgid "Disc Artwork Path"
msgstr ""
msgid "Disc Default"
msgstr ""
msgid "Disc Images"
msgstr ""
msgid "DiskFlip"
msgstr ""
msgid "Display"
msgstr ""
@ -404,6 +342,9 @@ msgstr ""
msgid "Do you want to format:"
msgstr ""
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr ""
@ -434,10 +375,13 @@ msgstr ""
msgid "Download request failed."
msgstr ""
msgid "Downloading"
msgid "Downloading Page List:"
msgstr ""
msgid "Downloading Page List:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
@ -446,13 +390,10 @@ msgstr ""
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr ""
msgid "Dutch"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
@ -464,9 +405,6 @@ msgstr ""
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr ""
msgid "Error"
msgstr ""
@ -476,15 +414,24 @@ msgstr ""
msgid "Error 002 fix"
msgstr ""
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr ""
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr ""
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr ""
msgid "Failed to open partition"
msgstr ""
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr ""
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr ""
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr ""
@ -545,15 +486,9 @@ msgstr ""
msgid "Free Space"
msgstr ""
msgid "French"
msgstr ""
msgid "Full Shutdown"
msgstr ""
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr ""
@ -566,9 +501,6 @@ msgstr ""
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr ""
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr ""
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr ""
msgid "Game Size"
msgstr ""
@ -599,18 +528,12 @@ msgstr ""
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr ""
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr ""
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr ""
msgid "Install"
msgstr ""
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr ""
@ -691,21 +611,12 @@ msgstr ""
msgid "Installing wad"
msgstr ""
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr ""
msgid "Italian"
msgstr ""
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr ""
msgid "July"
msgstr ""
@ -718,9 +629,6 @@ msgstr ""
msgid "Keyboard"
msgstr ""
msgid "Korean"
msgstr ""
msgid "Language File"
msgstr ""
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr ""
msgid "Left"
msgstr ""
msgid "Like SysMenu"
msgstr ""
msgid "Load"
msgstr ""
msgid "Load From SD/USB"
msgstr ""
#, c-format
msgid "Load file from: %s ?"
msgstr ""
@ -752,6 +651,9 @@ msgstr ""
msgid "Load this DOL as alternate DOL?"
msgstr ""
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr ""
@ -761,16 +663,7 @@ msgstr ""
msgid "Lock Console"
msgstr ""
msgid "Locked"
msgstr ""
msgid "Loop Directory"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr ""
msgid "Neither"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr ""
msgid "Next"
msgstr ""
msgid "No"
msgstr ""
@ -839,12 +729,6 @@ msgstr ""
msgid "No themes found on the site."
msgstr ""
msgid "None"
msgstr ""
msgid "Normal"
msgstr ""
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr ""
msgid "OK"
msgstr ""
msgid "ON"
msgstr ""
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr ""
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr ""
msgid "Only Original"
msgstr ""
msgid "Only for Install"
msgstr ""
msgid "Original/Customs"
msgstr ""
msgid "Parental Control"
msgstr ""
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr ""
@ -947,9 +813,6 @@ msgstr ""
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr ""
msgid "Power off the Wii"
msgstr ""
msgid "Prev"
msgstr ""
msgid "Prompts Buttons"
msgstr ""
@ -974,9 +834,6 @@ msgstr ""
msgid "Quick Boot"
msgstr ""
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr ""
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr ""
msgid "Right"
msgstr ""
msgid "Rumble"
msgstr ""
msgid "SChinese"
msgstr ""
msgid "SFX Volume"
msgstr ""
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr ""
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr ""
@ -1085,15 +933,6 @@ msgstr ""
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr ""
msgid "Sound+Quiet"
msgstr ""
msgid "Spanish"
msgstr ""
msgid "Special thanks to:"
msgstr ""
@ -1121,23 +960,17 @@ msgstr ""
msgid "Successfully installed:"
msgstr ""
msgid "System Default"
msgstr ""
msgid "TChinese"
msgstr ""
msgid "TXT Cheatcodes Path"
msgstr ""
msgid "The entered directory does not exist. Would you like to create it?"
msgstr ""
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
@ -1152,6 +985,9 @@ msgstr ""
msgid "Theme Title:"
msgstr ""
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr ""
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr ""
msgid "USB Loader GX is protected"
msgstr ""
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr ""
msgid "Uninstall"
msgstr ""
@ -1201,15 +1039,12 @@ msgstr ""
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr ""
msgid "Unlocked"
msgstr ""
msgid "Unsupported format, try to extract manually."
msgstr ""
@ -1234,21 +1069,12 @@ msgstr ""
msgid "Update failed"
msgstr ""
msgid "Update to"
msgstr ""
msgid "Updating"
msgstr ""
msgid "Updating Language Files..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr ""
msgid "Updating WiiTDB.zip"
msgstr ""
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr ""
@ -1280,9 +1106,6 @@ msgstr ""
msgid "WiFi Features"
msgstr ""
msgid "Widescreen Fix"
msgstr ""
msgid "Wii Menu"
msgstr ""
@ -1310,9 +1133,6 @@ msgstr ""
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr ""

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: c64rmx\n"
"Language-Team: \n"
@ -25,54 +25,15 @@ msgstr ""
msgid " is not on the server."
msgstr "Tiedostoa ei löydy serveriltä"
msgid "0 (Everyone)"
msgstr "0 (Kaikille)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Lapset 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr " 1 tunti"
msgid "10 min"
msgstr ""
msgid "2 (Teen 12+)"
msgstr "2 (Teinit 12+)"
msgid "20 min"
msgstr ""
msgid "2D Cover Path"
msgstr "2D Kansien polku"
msgid "3 (Mature 16+)"
msgstr "3 (Teinit 16+)"
msgid "3 min"
msgstr ""
msgid "30 min"
msgstr ""
msgid "3D Cover Path"
msgstr "3D Kansien polku"
msgid "3D Covers"
msgstr "3D Kannet"
msgid "4 (Adults Only 18+)"
msgstr "4 (K18)"
msgid "5 min"
msgstr ""
msgid ">> Deleting tickets..."
msgstr ">> Tuhotaan lipukkeita..."
@ -136,19 +97,13 @@ msgstr "Kaikki asetukset on nyt käytettävissä."
msgid "Alternate DOL"
msgstr "Vaihtoehto DOL"
msgid "An Error occured"
msgstr "Tapahtui virhe"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Ohjelman kieli"
msgid "Apr"
msgstr "huhti"
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "Autom. verkon käynnistys"
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -199,9 +151,6 @@ msgstr "Käynnistys/Standardi"
msgid "Boot?"
msgstr "Boottaa?"
msgid "Both"
msgstr "Molemmat"
msgid "Can't be formatted"
msgstr "Ei voida formatoida"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "Kooditiedosto tyhjä"
msgid "Checking for Updates"
msgstr "Tarkastetaan päivityksiä"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "Konsoli"
msgid "Console Default"
msgstr "Konsolin oletus"
msgid "Console Locked"
msgstr "Konsoli lukittu"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "GCT tiedostoa ei voitu luoda"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Tekijät"
msgid "Custom Paths"
msgstr "Omat polut"
msgid "Customs/Original"
msgstr "Omat/Alkuperäiset"
msgid "DOL Path"
msgstr "DOL:in polku"
@ -365,15 +309,9 @@ msgstr "Levykuvien lataus"
msgid "Disc Artwork Path"
msgstr "Levykuvien polku"
msgid "Disc Default"
msgstr "Pelin oletus"
msgid "Disc Images"
msgstr "Levykuvat"
msgid "DiskFlip"
msgstr "Levynvaihto"
msgid "Display"
msgstr "Näyttö"
@ -404,6 +342,9 @@ msgstr ""
msgid "Do you want to format:"
msgstr "Haluatko formatoida:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Haluatko käyttää vaihtoehtoista DOL tiedostoa jonka tiedetään toimivan?"
@ -434,26 +375,26 @@ msgstr "Lataus valmistunut"
msgid "Download request failed."
msgstr ""
msgid "Downloading"
msgstr "Lataa"
msgid "Downloading Page List:"
msgstr ""
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Lataa tiedostoa:"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr ""
msgid "Dutch"
msgstr "Hollanti"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "VIRHE"
@ -464,9 +405,6 @@ msgstr "VIRHE:"
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr "Englanti"
msgid "Error"
msgstr "Virhe"
@ -476,15 +414,24 @@ msgstr "Virhe !"
msgid "Error 002 fix"
msgstr "Virhe 002 fix"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Virhe luettaessa levyä"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Virhe siirrettäessä dataa."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr ""
msgid "Failed to open partition"
msgstr "Osion avaus epäonnistui"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "helmi"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Käännä-X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatoi"
@ -545,15 +486,9 @@ msgstr "Formatoi, odota..."
msgid "Free Space"
msgstr "Vapaata tilaa"
msgid "French"
msgstr "Ranska"
msgid "Full Shutdown"
msgstr "Täysi sammutus"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "GCT Koodien polku"
@ -566,9 +501,6 @@ msgstr "GUI asetukset"
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr "Peli ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Pelin lataus"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Alue"
msgid "Game Size"
msgstr "Pelin koko"
@ -599,18 +528,12 @@ msgstr "Peli on jo asennettu:"
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Pelejä"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Saksa"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Aseta SD-kortti käyttääksesi tätä vaihtoehtoa"
msgid "Install"
msgstr "Asenna"
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr "Asennusvirhe!"
@ -691,21 +611,12 @@ msgstr ""
msgid "Installing wad"
msgstr "Asennetaan wadia"
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Näyttää että sinulla on tietoa joka on hyödyllistä meille. Ole ystävällinen ja välitä se kehitystiimille."
msgid "Italian"
msgstr "Italia"
msgid "Jan"
msgstr "tammi"
msgid "Japanese"
msgstr "Japani"
msgid "July"
msgstr "heinä"
@ -718,9 +629,6 @@ msgstr "Pidä"
msgid "Keyboard"
msgstr "Näppäimistö"
msgid "Korean"
msgstr "Korea"
msgid "Language File"
msgstr "KieliTiedosto"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Kielen polku vaihdettu"
msgid "Left"
msgstr "Vasen"
msgid "Like SysMenu"
msgstr "Kuin wii-menu"
msgid "Load"
msgstr "Lataa"
msgid "Load From SD/USB"
msgstr "Lataa SD:ltä/USB:ltä"
#, c-format
msgid "Load file from: %s ?"
msgstr "Lataa tiedosto: %s ?"
@ -752,6 +651,9 @@ msgstr "Lataa tiedosto: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Lataa tämä vaihtoehtoisesti tämä dol?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Ladataan standardia kieltä"
@ -761,16 +663,7 @@ msgstr "Ladataan standardia musiikkia"
msgid "Lock Console"
msgstr "Lukitse konsoli"
msgid "Locked"
msgstr "Lukittu"
msgid "Loop Directory"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Voimakkuus"
msgid "Neither"
msgstr "Ei kumpikaan"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr ""
msgid "Next"
msgstr "Seuraava"
msgid "No"
msgstr "Ei"
@ -839,12 +729,6 @@ msgstr "Ei uusia päivityksiä"
msgid "No themes found on the site."
msgstr ""
msgid "None"
msgstr ""
msgid "Normal"
msgstr "Normaali"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "Pois"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Päälle"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Virallinen sivusto:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Vain omatekoiset"
msgid "Only Original"
msgstr "Vain alkuperäinen"
msgid "Only for Install"
msgstr "Ainoastaan asennusta varten"
msgid "Original/Customs"
msgstr "Alkuperäinen/Omatekoinen"
msgid "Parental Control"
msgstr "Valvonta"
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr "Osio"
@ -947,9 +813,6 @@ msgstr "Pelauksen määrä"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr ""
msgid "Power off the Wii"
msgstr "Sammuta Wii"
msgid "Prev"
msgstr "Edellinen"
msgid "Prompts Buttons"
msgstr "Napit"
@ -974,9 +834,6 @@ msgstr "Julkaisu:"
msgid "Quick Boot"
msgstr ""
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "Luetaan WAD:ia... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Palaa Wii menuun"
msgid "Right"
msgstr "Oikea"
msgid "Rumble"
msgstr "Värinä"
msgid "SChinese"
msgstr "SKiina"
msgid "SFX Volume"
msgstr "Ääniefektien voimakkuus"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Valitse DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "syys"
@ -1085,15 +933,6 @@ msgstr "Ääni"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr ""
msgid "Sound+Quiet"
msgstr ""
msgid "Spanish"
msgstr "Espanja"
msgid "Special thanks to:"
msgstr "Erityiskiitokset"
@ -1121,24 +960,18 @@ msgstr ""
msgid "Successfully installed:"
msgstr "Asennettu onnistuneesti:"
msgid "System Default"
msgstr "Wiin oletus"
msgid "TChinese"
msgstr "TKiina"
msgid "TXT Cheatcodes Path"
msgstr "TXT koodien polku"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr ""
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "Wad tiedostoa ei asennettu mutta sitä ei voitu tuhota SD-kortilta"
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "Wad asennus epäonnistui: %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr ""
@ -1152,6 +985,9 @@ msgstr "Teeman sijainti"
msgid "Theme Title:"
msgstr ""
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr ""
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB-laitetta ei löytynyt"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX on suojattu."
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Wadia (%s) jonka juuri latasit ei voitu avata."
msgid "Uninstall"
msgstr "Poista"
@ -1201,15 +1039,12 @@ msgstr "Poistetaan wad:ia"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Avaa konsoli käyttääksesi tätä vaihtoehtoa"
msgid "Unlocked"
msgstr "Avattu"
msgid "Unsupported format, try to extract manually."
msgstr ""
@ -1234,21 +1069,12 @@ msgstr "Päivitä kaikki kielitiedostot"
msgid "Update failed"
msgstr "Päivitys epäonnistui"
msgid "Update to"
msgstr "Päivitä:"
msgid "Updating"
msgstr "Päivittää"
msgid "Updating Language Files..."
msgstr "Päivittää kielitiedostoja..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Päivittää kielitiedostoja:"
msgid "Updating WiiTDB.zip"
msgstr "Päivittää WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr ""
@ -1280,9 +1106,6 @@ msgstr "Mitä haluat päivittää?"
msgid "WiFi Features"
msgstr "WiFi ominaisuudet"
msgid "Widescreen Fix"
msgstr "Laajakuva korjaus"
msgid "Wii Menu"
msgstr "Wii Menu"
@ -1310,9 +1133,6 @@ msgstr "Kyllä"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr ""
@ -1377,6 +1197,156 @@ msgstr "josta"
msgid "seconds left"
msgstr "sekuntia jäljellä"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Kaikille)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Lapset 7+)"
#~ msgid "1 hour"
#~ msgstr " 1 tunti"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Teinit 12+)"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Teinit 16+)"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (K18)"
#~ msgid "An Error occured"
#~ msgstr "Tapahtui virhe"
#~ msgid "Both"
#~ msgstr "Molemmat"
#~ msgid "Checking for Updates"
#~ msgstr "Tarkastetaan päivityksiä"
#~ msgid "Console Default"
#~ msgstr "Konsolin oletus"
#~ msgid "Customs/Original"
#~ msgstr "Omat/Alkuperäiset"
#~ msgid "Disc Default"
#~ msgstr "Pelin oletus"
#~ msgid "DiskFlip"
#~ msgstr "Levynvaihto"
#~ msgid "Downloading"
#~ msgstr "Lataa"
#~ msgid "Dutch"
#~ msgstr "Hollanti"
#~ msgid "English"
#~ msgstr "Englanti"
#~ msgid "French"
#~ msgstr "Ranska"
#~ msgid "Game ID"
#~ msgstr "Peli ID"
#~ msgid "Game Region"
#~ msgstr "Alue"
#~ msgid "German"
#~ msgstr "Saksa"
#~ msgid "Italian"
#~ msgstr "Italia"
#~ msgid "Japanese"
#~ msgstr "Japani"
#~ msgid "Korean"
#~ msgstr "Korea"
#~ msgid "Left"
#~ msgstr "Vasen"
#~ msgid "Like SysMenu"
#~ msgstr "Kuin wii-menu"
#~ msgid "Load From SD/USB"
#~ msgstr "Lataa SD:ltä/USB:ltä"
#~ msgid "Locked"
#~ msgstr "Lukittu"
#~ msgid "Neither"
#~ msgstr "Ei kumpikaan"
#~ msgid "Next"
#~ msgstr "Seuraava"
#~ msgid "Normal"
#~ msgstr "Normaali"
#~ msgid "ON"
#~ msgstr "Päälle"
#~ msgid "Only Customs"
#~ msgstr "Vain omatekoiset"
#~ msgid "Only Original"
#~ msgstr "Vain alkuperäinen"
#~ msgid "Only for Install"
#~ msgstr "Ainoastaan asennusta varten"
#~ msgid "Original/Customs"
#~ msgstr "Alkuperäinen/Omatekoinen"
#~ msgid "Prev"
#~ msgstr "Edellinen"
#~ msgid "Right"
#~ msgstr "Oikea"
#~ msgid "SChinese"
#~ msgstr "SKiina"
#~ msgid "Spanish"
#~ msgstr "Espanja"
#~ msgid "System Default"
#~ msgstr "Wiin oletus"
#~ msgid "TChinese"
#~ msgstr "TKiina"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "Wad tiedostoa ei asennettu mutta sitä ei voitu tuhota SD-kortilta"
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "Wad asennus epäonnistui: %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Wadia (%s) jonka juuri latasit ei voitu avata."
#~ msgid "Unlocked"
#~ msgstr "Avattu"
#~ msgid "Update to"
#~ msgstr "Päivitä:"
#~ msgid "Updating"
#~ msgstr "Päivittää"
#~ msgid "Updating Language Files..."
#~ msgstr "Päivittää kielitiedostoja..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Päivittää WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Laajakuva korjaus"
#~ msgid "Back to Wii Menu"
#~ msgstr "Takaisin Wii Menuun"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Kin8\n"
"Language-Team: Badablek, Amour, ikya & Kin8\n"
@ -25,54 +25,15 @@ msgstr " sauvegardé. Certains codes ne peuvent fonctionner conjointement. En ca
msgid " is not on the server."
msgstr " indisponible sur le serveur."
msgid "0 (Everyone)"
msgstr "0 (Tous 3+)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Enfants 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 heure"
msgid "10 min"
msgstr "10 min."
msgid "2 (Teen 12+)"
msgstr "2 (Adolescents 12+)"
msgid "20 min"
msgstr "20 min."
msgid "2D Cover Path"
msgstr "Dossier Jaquettes 2D"
msgid "3 (Mature 16+)"
msgstr "3 (Matures 16+)"
msgid "3 min"
msgstr "3 min."
msgid "30 min"
msgstr "30 min."
msgid "3D Cover Path"
msgstr "Dossier Jaquettes 3D"
msgid "3D Covers"
msgstr "Jaquettes 3D"
msgid "4 (Adults Only 18+)"
msgstr "4 (Adultes 18+)"
msgid "5 min"
msgstr "5 min."
msgid ">> Deleting tickets..."
msgstr ">> Suppression tickets..."
@ -136,20 +97,14 @@ msgstr "Toutes les fonctionnalités sont déverrouillées."
msgid "Alternate DOL"
msgstr "DOL Alternatif"
msgid "An Error occured"
msgstr "Une Erreur s'est produite"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Langue d'interface"
msgid "Apr"
msgstr "Avr"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Confirmation activation du Contrôle Parental ?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Auteur:"
msgid "AutoInit Network"
msgstr "AutoInit Réseau"
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr "Dossier Codes BCA"
@ -199,9 +151,6 @@ msgstr ""
msgid "Boot?"
msgstr "Lancer ?"
msgid "Both"
msgstr "Tous"
msgid "Can't be formatted"
msgstr "Formatage impossible"
@ -226,9 +175,6 @@ msgstr "Changer Dossier"
msgid "Cheatfile is blank"
msgstr "Fichier de triche vide"
msgid "Checking for Updates"
msgstr "Recherche de Mise à Jour"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Connexion perdue..."
msgid "Console"
msgstr ""
msgid "Console Default"
msgstr "Console par défaut"
msgid "Console Locked"
msgstr "Console verrouillée"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Impossible de créer le fichier GCT"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Crédits"
msgid "Custom Paths"
msgstr "Personnalisation Dossiers"
msgid "Customs/Original"
msgstr "Persos/Originaux"
msgid "DOL Path"
msgstr "Dossier DOL Alternatif"
@ -365,15 +309,9 @@ msgstr "Téléch. Labels DVD"
msgid "Disc Artwork Path"
msgstr "Dossier Labels DVD"
msgid "Disc Default"
msgstr "Disque par défaut"
msgid "Disc Images"
msgstr "Labels DVD"
msgid "DiskFlip"
msgstr "Inversion Disque"
msgid "Display"
msgstr "Affichage"
@ -404,6 +342,9 @@ msgstr "Voulez-vous télécharger ce thème ?"
msgid "Do you want to format:"
msgstr "Voulez-vous formater ?"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Voulez-vous utiliser le DOL Alternatif actuellement connu comme correct ?"
@ -434,26 +375,26 @@ msgstr "Téléchargement terminé"
msgid "Download request failed."
msgstr "Demande de téléchargement échouée"
msgid "Downloading"
msgstr "Téléchargement"
msgid "Downloading Page List:"
msgstr "Chargement Prévisualisations:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Téléchargement du fichier"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Téléchargement de l'image:"
msgid "Dutch"
msgstr "Néerlandais"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "ERREUR"
@ -464,9 +405,6 @@ msgstr "ERREUR:"
msgid "ERROR: Can't set up theme."
msgstr "ERREUR: Configuration thème impossible."
msgid "English"
msgstr "Anglais"
msgid "Error"
msgstr "Erreur"
@ -476,15 +414,24 @@ msgstr "Erreur !"
msgid "Error 002 fix"
msgstr "Correctif Erreur 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Erreur à la lecture du disque"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Erreur durant le transfert de données."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Extraction échouée."
msgid "Failed to open partition"
msgstr "Échec accès partition"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Fév"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Inversion-X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formater"
@ -545,15 +486,9 @@ msgstr "Formatage en cours, veuillez patienter..."
msgid "Free Space"
msgstr "Espace restant"
msgid "French"
msgstr "Français"
msgid "Full Shutdown"
msgstr "Éteindre"
msgid "GAMEID_Gamename"
msgstr "IDJEU_NomJeu"
msgid "GCT Cheatcodes Path"
msgstr "Dossier GCT de Triche"
@ -566,9 +501,6 @@ msgstr "Configuration GUI"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg non trouvé dans aucun sous-dossier."
msgid "Game ID"
msgstr "ID du jeu"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Chargement Jeux"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Région"
msgid "Game Size"
msgstr "Taille du jeu"
@ -599,18 +528,12 @@ msgstr "Le jeu est déjà installé:"
msgid "Game partition"
msgstr "Partition Jeu"
msgid "Gamename [GAMEID]"
msgstr "NomJeu [IDJEU]"
msgid "Games"
msgstr "Jeux"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Allemand"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Insérez une carte SD pour utiliser cette option."
msgid "Install"
msgstr "Installer"
msgid "Install 1:1 Copy"
msgstr "Installer Copie 1:1"
msgid "Install Error!"
msgstr "Erreur à l'installation !"
@ -691,21 +611,12 @@ msgstr "Installation titre... OK!"
msgid "Installing wad"
msgstr "Installation WAD"
msgid "Invalid PIN code"
msgstr "Code PIN invalide"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "SVP, faîtes passer cette information qui serait très utile à la Team USB Loader GX."
msgid "Italian"
msgstr "Italien"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japonais"
msgid "July"
msgstr "Juil"
@ -718,9 +629,6 @@ msgstr "Garder"
msgid "Keyboard"
msgstr "Clavier"
msgid "Korean"
msgstr "Coréen"
msgid "Language File"
msgstr "Langues"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Dossier Langue changé"
msgid "Left"
msgstr "Gauche"
msgid "Like SysMenu"
msgstr "Menu système"
msgid "Load"
msgstr "Charger"
msgid "Load From SD/USB"
msgstr "Charger sur SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Charger le fichier de: %s ?"
@ -752,6 +651,9 @@ msgstr "Charger le fichier de: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Charger comme DOL alternatif ?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Chargement langue par défaut."
@ -761,17 +663,8 @@ msgstr "Chargement musique standard."
msgid "Lock Console"
msgstr "Verrouiller la console"
msgid "Locked"
msgstr "Clic pour déverrouiller"
msgid "Loop Directory"
msgstr "Répéter Dossier"
msgid "Loop Music"
msgstr "Répéter Musique"
msgid "Loop Sound"
msgstr "Son en boucle"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr "Mars"
@ -794,15 +687,12 @@ msgstr "Mode Boucle Musique"
msgid "Music Volume"
msgstr "Volume Musique"
msgid "Neither"
msgstr "Aucun"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Nouveau DVD Détecté"
msgid "Next"
msgstr "Suivant"
msgid "No"
msgstr "Non"
@ -839,12 +729,6 @@ msgstr "Pas de nouvelle Mise à Jour."
msgid "No themes found on the site."
msgstr "Aucun thème trouvé sur le site."
msgid "None"
msgstr "Aucun"
msgid "Normal"
msgstr "4:3"
msgid "Not a WAD file."
msgstr "Ce n'est pas un fichier WAD"
@ -884,9 +768,6 @@ msgstr "Inactif"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Actif"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Site Officiel:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Personnalisés"
msgid "Only Original"
msgstr "Originaux"
msgid "Only for Install"
msgstr "Jeu installé seulement"
msgid "Original/Customs"
msgstr "Originaux/Persos"
msgid "Parental Control"
msgstr "Contrôle Parental"
msgid "Parental Control disabled"
msgstr "Contrôle Parental désactivé"
msgid "Partition"
msgstr ""
@ -947,9 +813,6 @@ msgstr "Utilisation"
msgid "Play Next"
msgstr "Jouer Suiv."
msgid "Play Once"
msgstr "Jouer 1 fois"
msgid "Play Previous"
msgstr "Jouer Précéd."
@ -962,9 +825,6 @@ msgstr "Veuillez patienter..."
msgid "Power off the Wii"
msgstr "Éteindre la Wii"
msgid "Prev"
msgstr "Précédent"
msgid "Prompts Buttons"
msgstr "Interface"
@ -974,9 +834,6 @@ msgstr "Publié par"
msgid "Quick Boot"
msgstr "Démarrage rapide"
msgid "Random Directory Music"
msgstr "Aléatoire"
msgid "Reading WAD data... Ok!"
msgstr "Lecture données WAD... OK!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Retourner au menu Wii"
msgid "Right"
msgstr "Droite"
msgid "Rumble"
msgstr "Vibrations"
msgid "SChinese"
msgstr "Chinois simplifié"
msgid "SFX Volume"
msgstr "Volume SFX"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Choisir un DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr ""
@ -1085,15 +933,6 @@ msgstr "Sons"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Son + Fond sonore"
msgid "Sound+Quiet"
msgstr "Son + Silence"
msgid "Spanish"
msgstr "Espagnol"
msgid "Special thanks to:"
msgstr "Remerciements spéciaux à:"
@ -1121,24 +960,18 @@ msgstr "Succès de l'extraction du thème."
msgid "Successfully installed:"
msgstr "Installé avec succès:"
msgid "System Default"
msgstr "Système par défaut"
msgid "TChinese"
msgstr "Chinois traditionnel"
msgid "TXT Cheatcodes Path"
msgstr "Dossier TXT de Triche"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Répertoire indiqué inexistant. Souhaitez-vous le créer ?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "Le Wad a été installé. Mais ne peut être supprimé de la carte SD."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "L'installation WAD a échoué avec erreur %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Dossier Thèmes Téléch."
@ -1152,6 +985,9 @@ msgstr "Dossier Thème"
msgid "Theme Title:"
msgstr "Titre du Thème:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Echec Transfert"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "Périphérique USB introuvable"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX est verrouillé"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Ouverture du WAD impossible (%s)."
msgid "Uninstall"
msgstr "Désinstaller"
@ -1201,15 +1039,12 @@ msgstr "Désinstallation wad"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Déverrouiller Contrôle Parental"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Cette option requiert le déverrouillage de l'interface."
msgid "Unlocked"
msgstr "Clic pour verrouiller"
msgid "Unsupported format, try to extract manually."
msgstr "Format non supporté, essayez d'extraire manuellement."
@ -1234,21 +1069,12 @@ msgstr "Mise à Jour tous fichiers Langue"
msgid "Update failed"
msgstr "Mise à Jour échouée"
msgid "Update to"
msgstr "vers la"
msgid "Updating"
msgstr "Mise à Jour"
msgid "Updating Language Files..."
msgstr "Mise à Jour Fichiers Langue..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Mise à Jour Fichiers Langue:"
msgid "Updating WiiTDB.zip"
msgstr "Mise à Jour WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Fichier ZIP envoyé et installé dans le répertoire homebrew."
@ -1280,9 +1106,6 @@ msgstr "Choix Mise à Jour"
msgid "WiFi Features"
msgstr "Connexion WiFi"
msgid "Widescreen Fix"
msgstr "16:9"
msgid "Wii Menu"
msgstr "Menu Wii"
@ -1310,9 +1133,6 @@ msgstr "Oui"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Contrôle Parental désactivé. Si vous voulez l'utiliser, activez-le dans les Paramètres de votre Wii."
msgid "You need to select or format a partition"
msgstr "Vous devez choisir ou formater une partition"
@ -1377,6 +1197,219 @@ msgstr "sur"
msgid "seconds left"
msgstr "secondes restantes"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Installer Copie 1:1"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Tous 3+)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Enfants 7+)"
#~ msgid "1 hour"
#~ msgstr "1 heure"
#~ msgid "10 min"
#~ msgstr "10 min."
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Adolescents 12+)"
#~ msgid "20 min"
#~ msgstr "20 min."
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Matures 16+)"
#~ msgid "3 min"
#~ msgstr "3 min."
#~ msgid "30 min"
#~ msgstr "30 min."
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Adultes 18+)"
#~ msgid "5 min"
#~ msgstr "5 min."
#~ msgid "An Error occured"
#~ msgstr "Une Erreur s'est produite"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Confirmation activation du Contrôle Parental ?"
#~ msgid "Both"
#~ msgstr "Tous"
#~ msgid "Checking for Updates"
#~ msgstr "Recherche de Mise à Jour"
#~ msgid "Console Default"
#~ msgstr "Console par défaut"
#~ msgid "Customs/Original"
#~ msgstr "Persos/Originaux"
#~ msgid "Disc Default"
#~ msgstr "Disque par défaut"
#~ msgid "DiskFlip"
#~ msgstr "Inversion Disque"
#~ msgid "Downloading"
#~ msgstr "Téléchargement"
#~ msgid "Dutch"
#~ msgstr "Néerlandais"
#~ msgid "English"
#~ msgstr "Anglais"
#~ msgid "French"
#~ msgstr "Français"
#~ msgid "GAMEID_Gamename"
#~ msgstr "IDJEU_NomJeu"
#~ msgid "Game ID"
#~ msgstr "ID du jeu"
#~ msgid "Game Region"
#~ msgstr "Région"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "NomJeu [IDJEU]"
#~ msgid "German"
#~ msgstr "Allemand"
#~ msgid "Invalid PIN code"
#~ msgstr "Code PIN invalide"
#~ msgid "Italian"
#~ msgstr "Italien"
#~ msgid "Japanese"
#~ msgstr "Japonais"
#~ msgid "Korean"
#~ msgstr "Coréen"
#~ msgid "Left"
#~ msgstr "Gauche"
#~ msgid "Like SysMenu"
#~ msgstr "Menu système"
#~ msgid "Load From SD/USB"
#~ msgstr "Charger sur SD/USB"
#~ msgid "Locked"
#~ msgstr "Clic pour déverrouiller"
#~ msgid "Loop Directory"
#~ msgstr "Répéter Dossier"
#~ msgid "Loop Music"
#~ msgstr "Répéter Musique"
#~ msgid "Loop Sound"
#~ msgstr "Son en boucle"
#~ msgid "Neither"
#~ msgstr "Aucun"
#~ msgid "Next"
#~ msgstr "Suivant"
#~ msgid "None"
#~ msgstr "Aucun"
#~ msgid "Normal"
#~ msgstr "4:3"
#~ msgid "ON"
#~ msgstr "Actif"
#~ msgid "Only Customs"
#~ msgstr "Personnalisés"
#~ msgid "Only Original"
#~ msgstr "Originaux"
#~ msgid "Only for Install"
#~ msgstr "Jeu installé seulement"
#~ msgid "Original/Customs"
#~ msgstr "Originaux/Persos"
#~ msgid "Parental Control disabled"
#~ msgstr "Contrôle Parental désactivé"
#~ msgid "Play Once"
#~ msgstr "Jouer 1 fois"
#~ msgid "Prev"
#~ msgstr "Précédent"
#~ msgid "Random Directory Music"
#~ msgstr "Aléatoire"
#~ msgid "Right"
#~ msgstr "Droite"
#~ msgid "SChinese"
#~ msgstr "Chinois simplifié"
#~ msgid "Sound+BGM"
#~ msgstr "Son + Fond sonore"
#~ msgid "Sound+Quiet"
#~ msgstr "Son + Silence"
#~ msgid "Spanish"
#~ msgstr "Espagnol"
#~ msgid "System Default"
#~ msgstr "Système par défaut"
#~ msgid "TChinese"
#~ msgstr "Chinois traditionnel"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "Le Wad a été installé. Mais ne peut être supprimé de la carte SD."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "L'installation WAD a échoué avec erreur %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Ouverture du WAD impossible (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Déverrouiller Contrôle Parental"
#~ msgid "Unlocked"
#~ msgstr "Clic pour verrouiller"
#~ msgid "Update to"
#~ msgstr "vers la"
#~ msgid "Updating"
#~ msgstr "Mise à Jour"
#~ msgid "Updating Language Files..."
#~ msgstr "Mise à Jour Fichiers Langue..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Mise à Jour WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "16:9"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Contrôle Parental désactivé. Si vous voulez l'utiliser, activez-le dans les Paramètres de votre Wii."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Peut ne pas démarrer correctement si votre Menu Système n'est pas à jour."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: ZEN.13\n"
"Language-Team: Snoozer, wishmasterf, Bertilax, ZEN.13\n"
@ -25,54 +25,15 @@ msgstr " wurde gespeichert. Möglicherweise funktionieren einige der Codes nicht
msgid " is not on the server."
msgstr " ist nicht auf dem Server."
msgid "0 (Everyone)"
msgstr "0 (Jeder)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Kinder 7+) "
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 Stunde"
msgid "10 min"
msgstr "10 Minuten"
msgid "2 (Teen 12+)"
msgstr "2 (Jugendliche 12+)"
msgid "20 min"
msgstr "20 Minuten"
msgid "2D Cover Path"
msgstr "2D Cover"
msgid "3 (Mature 16+)"
msgstr "3 (Erwachsene 16+)"
msgid "3 min"
msgstr "3 Minuten"
msgid "30 min"
msgstr "30 Minuten"
msgid "3D Cover Path"
msgstr "3D Cover"
msgid "3D Covers"
msgstr "3D Cover"
msgid "4 (Adults Only 18+)"
msgstr "4 (Erwachsene 18+)"
msgid "5 min"
msgstr "5 Minuten"
msgid ">> Deleting tickets..."
msgstr ">> Lösche Tickets..."
@ -136,20 +97,14 @@ msgstr "Alle Funktionen des USB Loader GX sind jetzt freigeschaltet."
msgid "Alternate DOL"
msgstr "Alternative DOL"
msgid "An Error occured"
msgstr "Ein Fehler ist aufgetreten."
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Sprache"
msgid "Apr"
msgstr "April"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Bist du sicher, das du die Altersbeschränkung aktivieren möchtest?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Autor:"
msgid "AutoInit Network"
msgstr "AutoInit Netzwerk"
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr "BCA Codes"
@ -199,9 +151,6 @@ msgstr "Bootstandard (cIOS)"
msgid "Boot?"
msgstr "Kanal starten?"
msgid "Both"
msgstr "ID und Region"
msgid "Can't be formatted"
msgstr "Kann nicht formatiert werden."
@ -226,9 +175,6 @@ msgstr "Pfad ändern"
msgid "Cheatfile is blank"
msgstr "Cheatdatei ist leer"
msgid "Checking for Updates"
msgstr "Suche nach Updates"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Verbindung abgebrochen..."
msgid "Console"
msgstr "Konsolenstatus"
msgid "Console Default"
msgstr "Konsolenstandard"
msgid "Console Locked"
msgstr "Konsole gesperrt"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "GCT Datei konnte nicht erstellt werden."
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr ""
msgid "Custom Paths"
msgstr "Pfade anpassen"
msgid "Customs/Original"
msgstr "Community/Original"
msgid "DOL Path"
msgstr "Alternative DOL"
@ -365,15 +309,9 @@ msgstr "Disc Cover Download"
msgid "Disc Artwork Path"
msgstr "Disc Cover"
msgid "Disc Default"
msgstr "Discstandard"
msgid "Disc Images"
msgstr "Disc Cover"
msgid "DiskFlip"
msgstr "DiscFlip"
msgid "Display"
msgstr "Spielinfos anzeigen"
@ -404,6 +342,9 @@ msgstr "Dieses Theme herunterladen?"
msgid "Do you want to format:"
msgstr "Formatieren:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Die bekannte Alternative DOL verwenden?"
@ -434,26 +375,26 @@ msgstr "Download abgeschlossen"
msgid "Download request failed."
msgstr "Downloadanfrage fehlgeschlagen"
msgid "Downloading"
msgstr "Dateien werden heruntergeladen"
msgid "Downloading Page List:"
msgstr "Liste der nächsten Seite wird geladen:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Theme wird heruntergeladen"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Weitere Vorschaubilder werden geladen:"
msgid "Dutch"
msgstr "Niederländisch"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "FEHLER"
@ -464,9 +405,6 @@ msgstr "FEHLER:"
msgid "ERROR: Can't set up theme."
msgstr "FEHLER: Theme kann nicht konfiguriert werden."
msgid "English"
msgstr "Englisch"
msgid "Error"
msgstr "Fehler"
@ -476,15 +414,24 @@ msgstr "Fehler !"
msgid "Error 002 fix"
msgstr "ERROR #002 beheben"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Fehler beim Lesen der Disc"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Fehler während der Datenübertragung."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Entpacken fehlgeschlagen."
msgid "Failed to open partition"
msgstr "Öffnen der Partition fehlgeschlagen"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Februar"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr ""
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatieren"
@ -545,15 +486,9 @@ msgstr "Formatiere, bitte warten..."
msgid "Free Space"
msgstr "Freier Speicher"
msgid "French"
msgstr "Französisch"
msgid "Full Shutdown"
msgstr "WiiConnect24 aus"
msgid "GAMEID_Gamename"
msgstr "SPIELID_Spielname"
msgid "GCT Cheatcodes Path"
msgstr "GCT Cheatdateien"
@ -566,9 +501,6 @@ msgstr "GUI Einstellungen"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg in keinem Unterordner gefunden."
msgid "Game ID"
msgstr "Spiel ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Spieleinstellungen"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Region"
msgid "Game Size"
msgstr "Größe"
@ -599,18 +528,12 @@ msgstr "Spiel ist bereits installiert:"
msgid "Game partition"
msgstr "Spielpartition"
msgid "Gamename [GAMEID]"
msgstr "Spielname [SPIELID]"
msgid "Games"
msgstr "Spiele"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Deutsch"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "SD Karte einlegen um diese Option zu nutzen."
msgid "Install"
msgstr "Installieren"
msgid "Install 1:1 Copy"
msgstr "1:1 Kopie installieren"
msgid "Install Error!"
msgstr "Installationsfehler!"
@ -691,21 +611,12 @@ msgstr "Installiere Title... OK!"
msgid "Installing wad"
msgstr "Installiere WAD"
msgid "Invalid PIN code"
msgstr "Ungültiger PIN Code"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Es scheint als ob du Informationen hast, die hilfreich für uns sein könnten. Bitte sende diese Information ans DEV Team."
msgid "Italian"
msgstr "Italienisch"
msgid "Jan"
msgstr "Januar"
msgid "Japanese"
msgstr "Japanisch"
msgid "July"
msgstr "Juli"
@ -718,9 +629,6 @@ msgstr "Behalten"
msgid "Keyboard"
msgstr "Tastatur"
msgid "Korean"
msgstr "Koreanisch"
msgid "Language File"
msgstr "Sprachdatei"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Pfad geändert"
msgid "Left"
msgstr "Links"
msgid "Like SysMenu"
msgstr "System Menü"
msgid "Load"
msgstr "Laden"
msgid "Load From SD/USB"
msgstr "von SD/USB laden"
#, c-format
msgid "Load file from: %s ?"
msgstr "Datei von %s laden?"
@ -752,6 +651,9 @@ msgstr "Datei von %s laden?"
msgid "Load this DOL as alternate DOL?"
msgstr "Diese DOL als Alternative DOL laden?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Lade Standardsprache."
@ -761,17 +663,8 @@ msgstr "Lade Standardmusik."
msgid "Lock Console"
msgstr "Konsole sperren"
msgid "Locked"
msgstr "Gesperrt"
msgid "Loop Directory"
msgstr "Verzeichnis wiederholen"
msgid "Loop Music"
msgstr "Scheife"
msgid "Loop Sound"
msgstr "Wiederholung"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr "März"
@ -794,15 +687,12 @@ msgstr "HGM Wiederholung"
msgid "Music Volume"
msgstr "Musik Lautstärke"
msgid "Neither"
msgstr "Keine"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Neu Disc im Laufwerk festgestellt"
msgid "Next"
msgstr "Weiter"
msgid "No"
msgstr "Nein"
@ -839,12 +729,6 @@ msgstr "Keine Updates verfügbar."
msgid "No themes found on the site."
msgstr "Keine Themes auf der Seite gefunden."
msgid "None"
msgstr "Keine"
msgid "Normal"
msgstr "Normal (4:3)"
msgid "Not a WAD file."
msgstr "Das ist keine WAD Datei."
@ -884,9 +768,6 @@ msgstr "AUS"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "AN"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Offizielle Seite:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "nur Community"
msgid "Only Original"
msgstr "nur Originale"
msgid "Only for Install"
msgstr "nur beim Installieren"
msgid "Original/Customs"
msgstr "Original/Community"
msgid "Parental Control"
msgstr "Altersbeschränkung"
msgid "Parental Control disabled"
msgstr "Altersbeschränkung ausgeschaltet"
msgid "Partition"
msgstr ""
@ -947,9 +813,6 @@ msgstr "Spielzähler"
msgid "Play Next"
msgstr "Nächster Titel"
msgid "Play Once"
msgstr "Einmal abspielen"
msgid "Play Previous"
msgstr "Vorheriger Titel"
@ -962,9 +825,6 @@ msgstr "Bitte warten..."
msgid "Power off the Wii"
msgstr "Wii ausschalten"
msgid "Prev"
msgstr "Zurück"
msgid "Prompts Buttons"
msgstr "Anzeige"
@ -974,9 +834,6 @@ msgstr "Veröffentlicht von"
msgid "Quick Boot"
msgstr "Schnelles Laden"
msgid "Random Directory Music"
msgstr "Zufällig"
msgid "Reading WAD data... Ok!"
msgstr "Lese WAD Daten... OK!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Zurück zum Wii Menü"
msgid "Right"
msgstr "Rechts"
msgid "Rumble"
msgstr ""
msgid "SChinese"
msgstr "Vereinfachtes Chinesisch"
msgid "SFX Volume"
msgstr "SFX Lautstärke"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "wähle eine DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "September"
@ -1085,15 +933,6 @@ msgstr "Ton"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "mit Hintergrundmusik"
msgid "Sound+Quiet"
msgstr "ohne Hintergrundmusik"
msgid "Spanish"
msgstr "Spanisch"
msgid "Special thanks to:"
msgstr "Besonderen Dank an:"
@ -1121,24 +960,18 @@ msgstr "Theme erfolgreich entpackt."
msgid "Successfully installed:"
msgstr "Erfolgreich installiert:"
msgid "System Default"
msgstr "Konsolenstandard"
msgid "TChinese"
msgstr "Traditionelles Chinesisch"
msgid "TXT Cheatcodes Path"
msgstr "TXT Cheatdateien"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Das eingegebene Verzeichnis existiert nicht. Möchtest du es erstellen?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "Die WAD Datei wurde installiert. Sie konnte aber nicht von der SD Karte gelöscht werden."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "Die WAD Installation schlug fehl durch Fehler %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Theme Downloader"
@ -1152,6 +985,9 @@ msgstr "Theme"
msgid "Theme Title:"
msgstr "Name:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Übertragung fehlgeschlagen"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB Gerät nicht gefunden."
msgid "USB Loader GX is protected"
msgstr "USB Loader GX ist jetzt geschützt."
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Die WAD Datei, die gerade heruntergeladen wurde (%s), konnte nicht geöffnet werden."
msgid "Uninstall"
msgstr "Deinstallieren"
@ -1201,15 +1039,12 @@ msgstr "Deinstalliere WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Altersbeschränkung deaktivieren"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Entsperre den Loader, um diese Option zu nutzen."
msgid "Unlocked"
msgstr "Entsperrt"
msgid "Unsupported format, try to extract manually."
msgstr "Nicht unterstütztes Format. Versuch es manuell zu Entpacken."
@ -1234,21 +1069,12 @@ msgstr "Sprachdateien aktualisieren"
msgid "Update failed"
msgstr "Update fehlgeschlagen"
msgid "Update to"
msgstr "Aktualisiere auf"
msgid "Updating"
msgstr "Aktualisiere"
msgid "Updating Language Files..."
msgstr "Aktualisiere Sprachdateien..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Aktualisiere Sprachdateien:"
msgid "Updating WiiTDB.zip"
msgstr "Aktualisiere WiiTDB"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Die hochgeladene ZIP Datei wurde ins Homebrew Verzeichnis installiert."
@ -1280,9 +1106,6 @@ msgstr "Was möchtest du aktualisieren?"
msgid "WiFi Features"
msgstr "WiFi Fähigkeiten"
msgid "Widescreen Fix"
msgstr "Breitbild (16:9)"
msgid "Wii Menu"
msgstr "Wii Menü"
@ -1310,9 +1133,6 @@ msgstr "Ja"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Du hast die Wii-Altersbeschränkung nicht aktiviert. Wenn du sie nutzen möchtest, aktiviere sie in den Wii-Systemeinstellungen."
msgid "You need to select or format a partition"
msgstr "Du must eine Partition auswählen oder formatieren."
@ -1377,6 +1197,219 @@ msgstr "von"
msgid "seconds left"
msgstr "Sekunden verbleiben"
#~ msgid "Install 1:1 Copy"
#~ msgstr "1:1 Kopie installieren"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Jeder)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Kinder 7+) "
#~ msgid "1 hour"
#~ msgstr "1 Stunde"
#~ msgid "10 min"
#~ msgstr "10 Minuten"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Jugendliche 12+)"
#~ msgid "20 min"
#~ msgstr "20 Minuten"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Erwachsene 16+)"
#~ msgid "3 min"
#~ msgstr "3 Minuten"
#~ msgid "30 min"
#~ msgstr "30 Minuten"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Erwachsene 18+)"
#~ msgid "5 min"
#~ msgstr "5 Minuten"
#~ msgid "An Error occured"
#~ msgstr "Ein Fehler ist aufgetreten."
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Bist du sicher, das du die Altersbeschränkung aktivieren möchtest?"
#~ msgid "Both"
#~ msgstr "ID und Region"
#~ msgid "Checking for Updates"
#~ msgstr "Suche nach Updates"
#~ msgid "Console Default"
#~ msgstr "Konsolenstandard"
#~ msgid "Customs/Original"
#~ msgstr "Community/Original"
#~ msgid "Disc Default"
#~ msgstr "Discstandard"
#~ msgid "DiskFlip"
#~ msgstr "DiscFlip"
#~ msgid "Downloading"
#~ msgstr "Dateien werden heruntergeladen"
#~ msgid "Dutch"
#~ msgstr "Niederländisch"
#~ msgid "English"
#~ msgstr "Englisch"
#~ msgid "French"
#~ msgstr "Französisch"
#~ msgid "GAMEID_Gamename"
#~ msgstr "SPIELID_Spielname"
#~ msgid "Game ID"
#~ msgstr "Spiel ID"
#~ msgid "Game Region"
#~ msgstr "Region"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "Spielname [SPIELID]"
#~ msgid "German"
#~ msgstr "Deutsch"
#~ msgid "Invalid PIN code"
#~ msgstr "Ungültiger PIN Code"
#~ msgid "Italian"
#~ msgstr "Italienisch"
#~ msgid "Japanese"
#~ msgstr "Japanisch"
#~ msgid "Korean"
#~ msgstr "Koreanisch"
#~ msgid "Left"
#~ msgstr "Links"
#~ msgid "Like SysMenu"
#~ msgstr "System Menü"
#~ msgid "Load From SD/USB"
#~ msgstr "von SD/USB laden"
#~ msgid "Locked"
#~ msgstr "Gesperrt"
#~ msgid "Loop Directory"
#~ msgstr "Verzeichnis wiederholen"
#~ msgid "Loop Music"
#~ msgstr "Scheife"
#~ msgid "Loop Sound"
#~ msgstr "Wiederholung"
#~ msgid "Neither"
#~ msgstr "Keine"
#~ msgid "Next"
#~ msgstr "Weiter"
#~ msgid "None"
#~ msgstr "Keine"
#~ msgid "Normal"
#~ msgstr "Normal (4:3)"
#~ msgid "ON"
#~ msgstr "AN"
#~ msgid "Only Customs"
#~ msgstr "nur Community"
#~ msgid "Only Original"
#~ msgstr "nur Originale"
#~ msgid "Only for Install"
#~ msgstr "nur beim Installieren"
#~ msgid "Original/Customs"
#~ msgstr "Original/Community"
#~ msgid "Parental Control disabled"
#~ msgstr "Altersbeschränkung ausgeschaltet"
#~ msgid "Play Once"
#~ msgstr "Einmal abspielen"
#~ msgid "Prev"
#~ msgstr "Zurück"
#~ msgid "Random Directory Music"
#~ msgstr "Zufällig"
#~ msgid "Right"
#~ msgstr "Rechts"
#~ msgid "SChinese"
#~ msgstr "Vereinfachtes Chinesisch"
#~ msgid "Sound+BGM"
#~ msgstr "mit Hintergrundmusik"
#~ msgid "Sound+Quiet"
#~ msgstr "ohne Hintergrundmusik"
#~ msgid "Spanish"
#~ msgstr "Spanisch"
#~ msgid "System Default"
#~ msgstr "Konsolenstandard"
#~ msgid "TChinese"
#~ msgstr "Traditionelles Chinesisch"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "Die WAD Datei wurde installiert. Sie konnte aber nicht von der SD Karte gelöscht werden."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "Die WAD Installation schlug fehl durch Fehler %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Die WAD Datei, die gerade heruntergeladen wurde (%s), konnte nicht geöffnet werden."
#~ msgid "Unlock Parental Control"
#~ msgstr "Altersbeschränkung deaktivieren"
#~ msgid "Unlocked"
#~ msgstr "Entsperrt"
#~ msgid "Update to"
#~ msgstr "Aktualisiere auf"
#~ msgid "Updating"
#~ msgstr "Aktualisiere"
#~ msgid "Updating Language Files..."
#~ msgstr "Aktualisiere Sprachdateien..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Aktualisiere WiiTDB"
#~ msgid "Widescreen Fix"
#~ msgstr "Breitbild (16:9)"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Du hast die Wii-Altersbeschränkung nicht aktiviert. Wenn du sie nutzen möchtest, aktiviere sie in den Wii-Systemeinstellungen."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s startet evtl. nicht richtig, falls dein System Menü nicht aktuell ist."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-12-29 11:05+0100\n"
"Last-Translator: Springdale\n"
"Language-Team: Tusk, Springdale\n"
@ -25,54 +25,15 @@ msgstr "elmentve. A fájl nincs ellenõrizve, és egyes kódok nem feltétlenül
msgid " is not on the server."
msgstr "nincs a szerveren."
msgid "0 (Everyone)"
msgstr "0 (Mindenkinek)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Gyermekeknek 12+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 óra"
msgid "10 min"
msgstr "10 perc"
msgid "2 (Teen 12+)"
msgstr "2 (Tinédzserek 14+)"
msgid "20 min"
msgstr "20 perc"
msgid "2D Cover Path"
msgstr "2D Boritó Útvonala"
msgid "3 (Mature 16+)"
msgstr "3 (Kamaszok 16+)"
msgid "3 min"
msgstr "3 perc"
msgid "30 min"
msgstr "30 perc"
msgid "3D Cover Path"
msgstr "3D Boritó Útvonala"
msgid "3D Covers"
msgstr "3D Borítók"
msgid "4 (Adults Only 18+)"
msgstr "4 (Felnõtteknek 18+)"
msgid "5 min"
msgstr "5 perc"
msgid ">> Deleting tickets..."
msgstr ">> Ticket-ek törlése..."
@ -136,20 +97,14 @@ msgstr "Az USB Loader GX minden funkciója elérhetõ."
msgid "Alternate DOL"
msgstr "Alternatív DOL"
msgid "An Error occured"
msgstr "Hiba történt"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Nyelv"
msgid "Apr"
msgstr "Ápr"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Szülõi felügyelet bekapcsolása?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Készítõ:"
msgid "AutoInit Network"
msgstr "Hálózat AutoInit"
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr "BCA kód útvonal"
@ -199,9 +151,6 @@ msgstr "Boot/Alapértelmezett"
msgid "Boot?"
msgstr ""
msgid "Both"
msgstr "Mindkettõ"
msgid "Can't be formatted"
msgstr "Nem Formázható"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "A cheat-fájl üres"
msgid "Checking for Updates"
msgstr "Frissitések keresése..."
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "A kapcsolat megszakadt..."
msgid "Console"
msgstr "Konzol"
msgid "Console Default"
msgstr "Konzol Alapértelmezett"
msgid "Console Locked"
msgstr "Konzol Zárolva"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Nem hozható létre GCT fájl"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Készítõk"
msgid "Custom Paths"
msgstr "Egyéni útvonalak"
msgid "Customs/Original"
msgstr "Egyéni/Eredeti"
msgid "DOL Path"
msgstr "DOL Útvonal"
@ -365,15 +309,9 @@ msgstr "Lemezfotó letöltése"
msgid "Disc Artwork Path"
msgstr "Lemezképek Útvonala"
msgid "Disc Default"
msgstr "Lemez Alapértelmezettje"
msgid "Disc Images"
msgstr "Lemezfotók"
msgid "DiskFlip"
msgstr "Lemezforgatás"
msgid "Display"
msgstr "Játékinfo megj."
@ -404,6 +342,9 @@ msgstr "Téma letöltése?"
msgid "Do you want to format:"
msgstr "Formázás?"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Köztudottan működõ alternatív DOL használata?"
@ -434,26 +375,26 @@ msgstr "Letöltés kész"
msgid "Download request failed."
msgstr "Sikertelen letöltési kérelem."
msgid "Downloading"
msgstr "Letöltés"
msgid "Downloading Page List:"
msgstr "Lista letöltése:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Fájl letöltése"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Kép letöltése:"
msgid "Dutch"
msgstr "Holland"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "HIBA"
@ -464,9 +405,6 @@ msgstr "HIBA:"
msgid "ERROR: Can't set up theme."
msgstr "HIBA: Téma nem állítható be"
msgid "English"
msgstr "Angol"
msgid "Error"
msgstr "Hiba"
@ -476,15 +414,24 @@ msgstr "Hiba !"
msgid "Error 002 fix"
msgstr "Error 02 javítás"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Lemezolvasási hiba"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Adatátviteli hiba."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "A kicsomagolás nem sikerült."
msgid "Failed to open partition"
msgstr "Hiba a partíció megnyitásakor"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr ""
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr ""
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formázás"
@ -545,15 +486,9 @@ msgstr "Formatálás folyamatban, kérlek várj..."
msgid "Free Space"
msgstr "Szabad Hely"
msgid "French"
msgstr "Francia"
msgid "Full Shutdown"
msgstr "Teljes Kikapcsolás"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "Kódok Útvonala"
@ -566,9 +501,6 @@ msgstr "Kezelõfelület"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg nem található."
msgid "Game ID"
msgstr "Játék ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Játék Betöltés"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Játék Régió"
msgid "Game Size"
msgstr "Játék Méret"
@ -599,18 +528,12 @@ msgstr "A játék már fel van telepítve:"
msgid "Game partition"
msgstr "Játék partíció"
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Játékok"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Német"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Helyezz be egy SD Kártyát, hogy használhasd ezt a lehetõséget."
msgid "Install"
msgstr "Telepítés"
msgid "Install 1:1 Copy"
msgstr "1:1 másolat telepítése"
msgid "Install Error!"
msgstr "Telepítési Hiba!"
@ -691,21 +611,12 @@ msgstr "Title telepítése... Ok!"
msgid "Installing wad"
msgstr "Wad telepítése"
msgid "Invalid PIN code"
msgstr "Hibás PIN kód"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Számunkra segítõ információid lehetnek - kérlek továbbítsd ezeket a fejlesztõi csapat felé."
msgid "Italian"
msgstr "Olasz"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japán"
msgid "July"
msgstr "Júl"
@ -718,9 +629,6 @@ msgstr "Megtartás"
msgid "Keyboard"
msgstr "Billenyûzet"
msgid "Korean"
msgstr "Koreai"
msgid "Language File"
msgstr "Nyelvi fájl"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Nyelvek útvonala megváltozott."
msgid "Left"
msgstr "Balra"
msgid "Like SysMenu"
msgstr "Mint a Rendszermenü"
msgid "Load"
msgstr "Betöltés"
msgid "Load From SD/USB"
msgstr "Betöltés SD/USB-rõl"
#, c-format
msgid "Load file from: %s ?"
msgstr "Fájl betöltése innen: %s ?"
@ -752,6 +651,9 @@ msgstr "Fájl betöltése innen: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "DOL betöltése alternatív DOL-ként?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Alapnyelv betõltése"
@ -761,18 +663,9 @@ msgstr "Alapzene betõltése"
msgid "Lock Console"
msgstr "Konzol Lezárása"
msgid "Locked"
msgstr "Lezárva"
msgid "Loop Directory"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgstr "Folyamatos hang"
msgid "Mar"
msgstr "Már"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Zene Hangerõ"
msgid "Neither"
msgstr "Egyik sem"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Új lemez észlelve"
msgid "Next"
msgstr "Következõ"
msgid "No"
msgstr "Nem"
@ -839,12 +729,6 @@ msgstr "Nincs elérhetõ frissítés."
msgid "No themes found on the site."
msgstr "Nem találhatóak témák az oldalon."
msgid "None"
msgstr ""
msgid "Normal"
msgstr "Normális"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "KI"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "BE"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Hivatalos oldal:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Csak egyéni"
msgid "Only Original"
msgstr "Csak eredeti"
msgid "Only for Install"
msgstr "Csak telepítéshez"
msgid "Original/Customs"
msgstr "Eredeti/Egyéni"
msgid "Parental Control"
msgstr "Szülõi Felügyelet"
msgid "Parental Control disabled"
msgstr "Szülõi felügyelet kikapcsolva"
msgid "Partition"
msgstr "Partició"
@ -947,9 +813,6 @@ msgstr "Indítások"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "Kérlek várj..."
msgid "Power off the Wii"
msgstr "Wii kikapcsolása"
msgid "Prev"
msgstr "Elõzõ"
msgid "Prompts Buttons"
msgstr "Gyors Gombok"
@ -974,9 +834,6 @@ msgstr "Kiadta"
msgid "Quick Boot"
msgstr "Gyors Boot"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "WAD adat olvasás... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Vissza a Wii Menübe"
msgid "Right"
msgstr "Jobb"
msgid "Rumble"
msgstr "Rezgés"
msgid "SChinese"
msgstr "SKínai"
msgid "SFX Volume"
msgstr "Effekt Hangerõ"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "DOL kiválasztása"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Szep"
@ -1085,15 +933,6 @@ msgstr "Hang"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Hang+háttérzene"
msgid "Sound+Quiet"
msgstr "Csak hang"
msgid "Spanish"
msgstr "Spanyol"
msgid "Special thanks to:"
msgstr "Külön Köszönet:"
@ -1121,24 +960,18 @@ msgstr "Téma kicsomagolva."
msgid "Successfully installed:"
msgstr "Sikeresen telepítve:"
msgid "System Default"
msgstr "Rendszer Alapértelmezett"
msgid "TChinese"
msgstr "Tradicionális Kínai"
msgid "TXT Cheatcodes Path"
msgstr "TXT Cheatkódok Útvonala"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "A megadott könyvtár nem létezik. Létrehozzuk?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "A wad fájl telepítése megtörtént, de nem volt törölhetõ az SD kártyáról."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "A wad telepítés nem sikerült - hiba %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Téma Letöltés Útvonal"
@ -1152,6 +985,9 @@ msgstr "Témák Útvonala"
msgid "Theme Title:"
msgstr "Téma címe:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Átviteli hiba."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB Meghajtó nem található"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX levédve"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Az épp letöltött wad megnyitása nem sikerült (%s)."
msgid "Uninstall"
msgstr "Törlés"
@ -1201,15 +1039,12 @@ msgstr "Wad törlése"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Szülõi felügyelet feloldása"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Zárolva a program, ezt nem használhatod."
msgid "Unlocked"
msgstr "Feloldva"
msgid "Unsupported format, try to extract manually."
msgstr "Nem támogatott formátum, próbáld manuálisan kicsomagolni."
@ -1234,21 +1069,12 @@ msgstr "Minden nyelvi fájl frissítése"
msgid "Update failed"
msgstr "Frissítési hiba"
msgid "Update to"
msgstr "Frissítés ide: "
msgid "Updating"
msgstr "Frissítés"
msgid "Updating Language Files..."
msgstr "Nyelvi fájlok frissítése..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Nyelvi fájlok frissítése:"
msgid "Updating WiiTDB.zip"
msgstr "WiiTDB.zip frissítése"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Feltöltött ZIP fájl telepítve a Homebrew mappába."
@ -1280,9 +1106,6 @@ msgstr "Mit szeretnél frissíteni?"
msgid "WiFi Features"
msgstr "WiFi Sajátosságok"
msgid "Widescreen Fix"
msgstr "Szélesvászon Fix"
msgid "Wii Menu"
msgstr "Wii Menü"
@ -1310,9 +1133,6 @@ msgstr "Igen"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "A szülõi felügyelet nincs bekapcsolva - bekapcsolható a Wii Beállításokban."
msgid "You need to select or format a partition"
msgstr "Választanod vagy formáznod kell egy partíciót"
@ -1377,6 +1197,198 @@ msgstr "./"
msgid "seconds left"
msgstr "hátralévõ másodperc"
#~ msgid "Install 1:1 Copy"
#~ msgstr "1:1 másolat telepítése"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Mindenkinek)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Gyermekeknek 12+)"
#~ msgid "1 hour"
#~ msgstr "1 óra"
#~ msgid "10 min"
#~ msgstr "10 perc"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Tinédzserek 14+)"
#~ msgid "20 min"
#~ msgstr "20 perc"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Kamaszok 16+)"
#~ msgid "3 min"
#~ msgstr "3 perc"
#~ msgid "30 min"
#~ msgstr "30 perc"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Felnõtteknek 18+)"
#~ msgid "5 min"
#~ msgstr "5 perc"
#~ msgid "An Error occured"
#~ msgstr "Hiba történt"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Szülõi felügyelet bekapcsolása?"
#~ msgid "Both"
#~ msgstr "Mindkettõ"
#~ msgid "Checking for Updates"
#~ msgstr "Frissitések keresése..."
#~ msgid "Console Default"
#~ msgstr "Konzol Alapértelmezett"
#~ msgid "Customs/Original"
#~ msgstr "Egyéni/Eredeti"
#~ msgid "Disc Default"
#~ msgstr "Lemez Alapértelmezettje"
#~ msgid "DiskFlip"
#~ msgstr "Lemezforgatás"
#~ msgid "Downloading"
#~ msgstr "Letöltés"
#~ msgid "Dutch"
#~ msgstr "Holland"
#~ msgid "English"
#~ msgstr "Angol"
#~ msgid "French"
#~ msgstr "Francia"
#~ msgid "Game ID"
#~ msgstr "Játék ID"
#~ msgid "Game Region"
#~ msgstr "Játék Régió"
#~ msgid "German"
#~ msgstr "Német"
#~ msgid "Invalid PIN code"
#~ msgstr "Hibás PIN kód"
#~ msgid "Italian"
#~ msgstr "Olasz"
#~ msgid "Japanese"
#~ msgstr "Japán"
#~ msgid "Korean"
#~ msgstr "Koreai"
#~ msgid "Left"
#~ msgstr "Balra"
#~ msgid "Like SysMenu"
#~ msgstr "Mint a Rendszermenü"
#~ msgid "Load From SD/USB"
#~ msgstr "Betöltés SD/USB-rõl"
#~ msgid "Locked"
#~ msgstr "Lezárva"
#~ msgid "Loop Sound"
#~ msgstr "Folyamatos hang"
#~ msgid "Neither"
#~ msgstr "Egyik sem"
#~ msgid "Next"
#~ msgstr "Következõ"
#~ msgid "Normal"
#~ msgstr "Normális"
#~ msgid "ON"
#~ msgstr "BE"
#~ msgid "Only Customs"
#~ msgstr "Csak egyéni"
#~ msgid "Only Original"
#~ msgstr "Csak eredeti"
#~ msgid "Only for Install"
#~ msgstr "Csak telepítéshez"
#~ msgid "Original/Customs"
#~ msgstr "Eredeti/Egyéni"
#~ msgid "Parental Control disabled"
#~ msgstr "Szülõi felügyelet kikapcsolva"
#~ msgid "Prev"
#~ msgstr "Elõzõ"
#~ msgid "Right"
#~ msgstr "Jobb"
#~ msgid "SChinese"
#~ msgstr "SKínai"
#~ msgid "Sound+BGM"
#~ msgstr "Hang+háttérzene"
#~ msgid "Sound+Quiet"
#~ msgstr "Csak hang"
#~ msgid "Spanish"
#~ msgstr "Spanyol"
#~ msgid "System Default"
#~ msgstr "Rendszer Alapértelmezett"
#~ msgid "TChinese"
#~ msgstr "Tradicionális Kínai"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "A wad fájl telepítése megtörtént, de nem volt törölhetõ az SD kártyáról."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "A wad telepítés nem sikerült - hiba %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Az épp letöltött wad megnyitása nem sikerült (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Szülõi felügyelet feloldása"
#~ msgid "Unlocked"
#~ msgstr "Feloldva"
#~ msgid "Update to"
#~ msgstr "Frissítés ide: "
#~ msgid "Updating"
#~ msgstr "Frissítés"
#~ msgid "Updating Language Files..."
#~ msgstr "Nyelvi fájlok frissítése..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "WiiTDB.zip frissítése"
#~ msgid "Widescreen Fix"
#~ msgstr "Szélesvászon Fix"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "A szülõi felügyelet nincs bekapcsolva - bekapcsolható a Wii Beállításokban."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Lehet, hogy nem fut megfelelõen, ha a System Menu nem a legfrissebb."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2010-02-21 08:00+0200\n"
"Last-Translator: Cambo \n"
"Language-Team: FoxeJoe, Cambo\n"
@ -25,54 +25,15 @@ msgstr " è stato salvato. Parte del codice potrebbe non funzionare correttament
msgid " is not on the server."
msgstr " non è disponibile sul server."
msgid "0 (Everyone)"
msgstr "0 (Tutti)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Bambini 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 ora"
msgid "10 min"
msgstr "10 minuti"
msgid "2 (Teen 12+)"
msgstr "2 (Ragazzini 12+)"
msgid "20 min"
msgstr "20 minuti"
msgid "2D Cover Path"
msgstr "Percorso Copertine 2D"
msgid "3 (Mature 16+)"
msgstr "3 (Ragazzi 16+)"
msgid "3 min"
msgstr "3 minuti"
msgid "30 min"
msgstr "30 minuti"
msgid "3D Cover Path"
msgstr "Percorso Copertine 3D"
msgid "3D Covers"
msgstr "Copertine 3D"
msgid "4 (Adults Only 18+)"
msgstr "4 (Maggiorenni 18+)"
msgid "5 min"
msgstr "5 minuti"
msgid ">> Deleting tickets..."
msgstr ">> Eliminazione ticket..."
@ -136,20 +97,14 @@ msgstr "Tutte le funzioni di USB Loader GX sono sbloccate."
msgid "Alternate DOL"
msgstr "DOL Alternativo"
msgid "An Error occured"
msgstr "C'è stato un errore"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Percorso Lingua"
msgid "Apr"
msgstr "aprile"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Sei sicuro di voler attivare il Controllo Genitori?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Autore:"
msgid "AutoInit Network"
msgstr "Inizializz. Rete Automatica"
msgid "AutoPatch"
msgstr "Correzione automatica"
msgid "BCA Codes Path"
msgstr "Percorso Codici BCA"
@ -199,9 +151,6 @@ msgstr "Riavvio/Standard"
msgid "Boot?"
msgstr "Vuoi riavviare?"
msgid "Both"
msgstr "Entrambi"
msgid "Can't be formatted"
msgstr "Non si può formattare"
@ -226,9 +175,6 @@ msgstr "Modifica Percorso Suoni"
msgid "Cheatfile is blank"
msgstr "il file dei trucchi è vuoto"
msgid "Checking for Updates"
msgstr "Verifica Aggiornamenti"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Connessione persa..."
msgid "Console"
msgstr "Terminale"
msgid "Console Default"
msgstr "Predefinita Console"
msgid "Console Locked"
msgstr "Console Bloccata"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Non è stato possibile creare il file GCT"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr ""
msgid "Custom Paths"
msgstr "Impostazione Percorsi (Directory)"
msgid "Customs/Original"
msgstr "Modific./Origin."
msgid "DOL Path"
msgstr "Percorso File DOL"
@ -365,15 +309,9 @@ msgstr "Scaricamento Imm. Disco"
msgid "Disc Artwork Path"
msgstr "Percorso Imm. Disco"
msgid "Disc Default"
msgstr "Predefinita Disco"
msgid "Disc Images"
msgstr "Immagini Disco"
msgid "DiskFlip"
msgstr "Gira i dischi"
msgid "Display"
msgstr "Visualizza"
@ -404,6 +342,9 @@ msgstr "Vuoi scaricare questo tema?"
msgid "Do you want to format:"
msgstr "Vuoi formattare:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Vuoi utilizzare il DOL alternativo funzionante?"
@ -434,26 +375,26 @@ msgstr "Ho finito di scaricare"
msgid "Download request failed."
msgstr "Richiesta di download fallita."
msgid "Downloading"
msgstr "Sto scaricando"
msgid "Downloading Page List:"
msgstr "Sto scaricando l'elenco:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Sto scaricando il file"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Sto scaricando l'immagine:"
msgid "Dutch"
msgstr "Olandese"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "ERRORE"
@ -464,9 +405,6 @@ msgstr "ERRORE:"
msgid "ERROR: Can't set up theme."
msgstr "ERRORE: Impossibile configurare il tema."
msgid "English"
msgstr "Inglese"
msgid "Error"
msgstr "Errore"
@ -476,15 +414,24 @@ msgstr "Errore !"
msgid "Error 002 fix"
msgstr "Correzione Error002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Errore Lettura Disco"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Errore durante il trasferimento dei dati."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Scompattamento fallito."
msgid "Failed to open partition"
msgstr "Non si accede alla partizione"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "febbraio"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Scorrimento Dischi"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatta"
@ -545,15 +486,9 @@ msgstr "Sto Formattando, prego attendere..."
msgid "Free Space"
msgstr "Spazio libero"
msgid "French"
msgstr "Francese"
msgid "Full Shutdown"
msgstr "Completo"
msgid "GAMEID_Gamename"
msgstr "IDGIOCO_Nomegioco"
msgid "GCT Cheatcodes Path"
msgstr "Percorso Trucchi in GCT"
@ -566,9 +501,6 @@ msgstr "Impostazioni Loader"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "Nessuna sottocartella contiene il file GXtheme.cfg."
msgid "Game ID"
msgstr "ID Gioco"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Impostazioni Giochi"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Regione Gioco"
msgid "Game Size"
msgstr "Dimensione Gioco"
@ -599,18 +528,12 @@ msgstr "Gioco già installato:"
msgid "Game partition"
msgstr "Partizione gioco"
msgid "Gamename [GAMEID]"
msgstr "Nomegioco [IDGIOCO]"
msgid "Games"
msgstr "Giochi"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Tedesco"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Inserire scheda SD per questa opzione"
msgid "Install"
msgstr "Installa"
msgid "Install 1:1 Copy"
msgstr "Installa copia 1:1"
msgid "Install Error!"
msgstr "Errore Installazione!"
@ -691,21 +611,12 @@ msgstr "Sto installando il titolo... Ok!"
msgid "Installing wad"
msgstr "Sto installando il WAD"
msgid "Invalid PIN code"
msgstr "Codice PIN non valido"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Hai informazioni che potrebbero esserci utili. Per favore, comunicale al team di sviluppo."
msgid "Italian"
msgstr "Italiano"
msgid "Jan"
msgstr "gennaio"
msgid "Japanese"
msgstr "Giapponese"
msgid "July"
msgstr "luglio"
@ -718,9 +629,6 @@ msgstr "Mantieni"
msgid "Keyboard"
msgstr "Tastiera"
msgid "Korean"
msgstr "Coreano"
msgid "Language File"
msgstr "File Lingue"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Percorso Lingue modificato"
msgid "Left"
msgstr "Sinistra"
msgid "Like SysMenu"
msgstr "Come SysMenu"
msgid "Load"
msgstr "Carica"
msgid "Load From SD/USB"
msgstr "Caricamento da SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Vuoi caricare il file da: %s ?"
@ -752,6 +651,9 @@ msgstr "Vuoi caricare il file da: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Vuoi caricare questo DOL come DOL alternativo?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Caricamento Lingua Standard."
@ -761,17 +663,8 @@ msgstr "Caricamento Musica std."
msgid "Lock Console"
msgstr "Blocco Console"
msgid "Locked"
msgstr "Bloccato"
msgid "Loop Directory"
msgstr "Cartella Cicli"
msgid "Loop Music"
msgstr "Musica Ripetuta"
msgid "Loop Sound"
msgstr "Suono Ripetuto"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr "marzo"
@ -794,15 +687,12 @@ msgstr "Modalità Musica Ripetuta"
msgid "Music Volume"
msgstr "Volume"
msgid "Neither"
msgstr "Nessuno"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Trovato Nuovo Disco"
msgid "Next"
msgstr "Avanti"
msgid "No"
msgstr ""
@ -839,12 +729,6 @@ msgstr "Nessun Aggiornamento."
msgid "No themes found on the site."
msgstr "Nessun tema trovato sul sito."
msgid "None"
msgstr "Nessuno"
msgid "Normal"
msgstr "Normale"
msgid "Not a WAD file."
msgstr "Non è un file WAD."
@ -884,9 +768,6 @@ msgstr "Disattivato"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Attivato"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Sito Ufficiale:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Modificate"
msgid "Only Original"
msgstr "Originali"
msgid "Only for Install"
msgstr "Installa Solamente"
msgid "Original/Customs"
msgstr "Origin./Modific."
msgid "Parental Control"
msgstr "Controllo Genitori"
msgid "Parental Control disabled"
msgstr "Controllo Genitori disabilitato"
msgid "Partition"
msgstr "Partizione"
@ -947,9 +813,6 @@ msgstr "Giocati"
msgid "Play Next"
msgstr "Suona Successiva"
msgid "Play Once"
msgstr "Suona una volta"
msgid "Play Previous"
msgstr "Suona Precedente"
@ -962,9 +825,6 @@ msgstr "Attendere prego..."
msgid "Power off the Wii"
msgstr "Spegnimento Wii"
msgid "Prev"
msgstr "Indietro"
msgid "Prompts Buttons"
msgstr "Pulsanti"
@ -974,9 +834,6 @@ msgstr "Pubblicato da"
msgid "Quick Boot"
msgstr "Avvio Veloce"
msgid "Random Directory Music"
msgstr "Cartella Musica Casuale"
msgid "Reading WAD data... Ok!"
msgstr "Sto leggendo i dati del WAD... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Torna al Menu Wii"
msgid "Right"
msgstr "Destra"
msgid "Rumble"
msgstr "Vibrazione"
msgid "SChinese"
msgstr "Cinese Moderno"
msgid "SFX Volume"
msgstr "Volume SFX"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Seleziona un file DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "settembre"
@ -1085,15 +933,6 @@ msgstr "Audio"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Suono+BGM"
msgid "Sound+Quiet"
msgstr "Suono+Silenzio"
msgid "Spanish"
msgstr "Spagnolo"
msgid "Special thanks to:"
msgstr "Un ringraziamento speciale a:"
@ -1121,24 +960,18 @@ msgstr "Tema scompattato con successo."
msgid "Successfully installed:"
msgstr "Installato con successo:"
msgid "System Default"
msgstr "Predefinita Sistema"
msgid "TChinese"
msgstr "Cinese Tradizionale"
msgid "TXT Cheatcodes Path"
msgstr "Percorso Trucchi in TXT"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "La cartella indicata non esiste. Vuoi crearla?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "File Wad installato. Non si può però eliminare dalla scheda SD."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "L'installazione del WAD è fallita con errore %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Percorso Download Temi"
@ -1152,6 +985,9 @@ msgstr "Percorso Tema"
msgid "Theme Title:"
msgstr "Titolo del tema:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Trasferimento fallito."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "Dispositivo USB non Trovato"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX è Protetto"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Non riesco ad aprire il wad da poco scaricato (%s)."
msgid "Uninstall"
msgstr "Disinstalla"
@ -1201,15 +1039,12 @@ msgstr "Disinstalla WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Sblocca Controllo Genitori"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Sblocca la Console per usare questa opzione."
msgid "Unlocked"
msgstr "Sbloccato"
msgid "Unsupported format, try to extract manually."
msgstr "Formato non supportato, provare a scompattare manualmente."
@ -1234,21 +1069,12 @@ msgstr "Aggiorna tutti i file delle lingue"
msgid "Update failed"
msgstr "Aggiornamento Fallito"
msgid "Update to"
msgstr "Aggiornamento alla"
msgid "Updating"
msgstr "Aggiornamento"
msgid "Updating Language Files..."
msgstr "Aggiornamento file delle lingue..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Aggiornamento file delle lingue:"
msgid "Updating WiiTDB.zip"
msgstr "Aggiornamento file WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "File ZIP installato nella cartella Homebrew"
@ -1280,9 +1106,6 @@ msgstr "Che cosa vuoi aggiornare?"
msgid "WiFi Features"
msgstr "Caratteristiche WiFi"
msgid "Widescreen Fix"
msgstr "Widescreen"
msgid "Wii Menu"
msgstr "Menu Wii"
@ -1310,9 +1133,6 @@ msgstr "Sì"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Il Controllo Genitori non è attivo. Se vuoi utilizzare il Controllo Genitori abilitalo nelle Impostazioni della Wii."
msgid "You need to select or format a partition"
msgstr "Occorre selezionare o formattare una partizione"
@ -1377,6 +1197,222 @@ msgstr "di"
msgid "seconds left"
msgstr "secondi mancanti"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Installa copia 1:1"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Tutti)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Bambini 7+)"
#~ msgid "1 hour"
#~ msgstr "1 ora"
#~ msgid "10 min"
#~ msgstr "10 minuti"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Ragazzini 12+)"
#~ msgid "20 min"
#~ msgstr "20 minuti"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Ragazzi 16+)"
#~ msgid "3 min"
#~ msgstr "3 minuti"
#~ msgid "30 min"
#~ msgstr "30 minuti"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Maggiorenni 18+)"
#~ msgid "5 min"
#~ msgstr "5 minuti"
#~ msgid "An Error occured"
#~ msgstr "C'è stato un errore"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Sei sicuro di voler attivare il Controllo Genitori?"
#~ msgid "AutoPatch"
#~ msgstr "Correzione automatica"
#~ msgid "Both"
#~ msgstr "Entrambi"
#~ msgid "Checking for Updates"
#~ msgstr "Verifica Aggiornamenti"
#~ msgid "Console Default"
#~ msgstr "Predefinita Console"
#~ msgid "Customs/Original"
#~ msgstr "Modific./Origin."
#~ msgid "Disc Default"
#~ msgstr "Predefinita Disco"
#~ msgid "DiskFlip"
#~ msgstr "Gira i dischi"
#~ msgid "Downloading"
#~ msgstr "Sto scaricando"
#~ msgid "Dutch"
#~ msgstr "Olandese"
#~ msgid "English"
#~ msgstr "Inglese"
#~ msgid "French"
#~ msgstr "Francese"
#~ msgid "GAMEID_Gamename"
#~ msgstr "IDGIOCO_Nomegioco"
#~ msgid "Game ID"
#~ msgstr "ID Gioco"
#~ msgid "Game Region"
#~ msgstr "Regione Gioco"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "Nomegioco [IDGIOCO]"
#~ msgid "German"
#~ msgstr "Tedesco"
#~ msgid "Invalid PIN code"
#~ msgstr "Codice PIN non valido"
#~ msgid "Italian"
#~ msgstr "Italiano"
#~ msgid "Japanese"
#~ msgstr "Giapponese"
#~ msgid "Korean"
#~ msgstr "Coreano"
#~ msgid "Left"
#~ msgstr "Sinistra"
#~ msgid "Like SysMenu"
#~ msgstr "Come SysMenu"
#~ msgid "Load From SD/USB"
#~ msgstr "Caricamento da SD/USB"
#~ msgid "Locked"
#~ msgstr "Bloccato"
#~ msgid "Loop Directory"
#~ msgstr "Cartella Cicli"
#~ msgid "Loop Music"
#~ msgstr "Musica Ripetuta"
#~ msgid "Loop Sound"
#~ msgstr "Suono Ripetuto"
#~ msgid "Neither"
#~ msgstr "Nessuno"
#~ msgid "Next"
#~ msgstr "Avanti"
#~ msgid "None"
#~ msgstr "Nessuno"
#~ msgid "Normal"
#~ msgstr "Normale"
#~ msgid "ON"
#~ msgstr "Attivato"
#~ msgid "Only Customs"
#~ msgstr "Modificate"
#~ msgid "Only Original"
#~ msgstr "Originali"
#~ msgid "Only for Install"
#~ msgstr "Installa Solamente"
#~ msgid "Original/Customs"
#~ msgstr "Origin./Modific."
#~ msgid "Parental Control disabled"
#~ msgstr "Controllo Genitori disabilitato"
#~ msgid "Play Once"
#~ msgstr "Suona una volta"
#~ msgid "Prev"
#~ msgstr "Indietro"
#~ msgid "Random Directory Music"
#~ msgstr "Cartella Musica Casuale"
#~ msgid "Right"
#~ msgstr "Destra"
#~ msgid "SChinese"
#~ msgstr "Cinese Moderno"
#~ msgid "Sound+BGM"
#~ msgstr "Suono+BGM"
#~ msgid "Sound+Quiet"
#~ msgstr "Suono+Silenzio"
#~ msgid "Spanish"
#~ msgstr "Spagnolo"
#~ msgid "System Default"
#~ msgstr "Predefinita Sistema"
#~ msgid "TChinese"
#~ msgstr "Cinese Tradizionale"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "File Wad installato. Non si può però eliminare dalla scheda SD."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "L'installazione del WAD è fallita con errore %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Non riesco ad aprire il wad da poco scaricato (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Sblocca Controllo Genitori"
#~ msgid "Unlocked"
#~ msgstr "Sbloccato"
#~ msgid "Update to"
#~ msgstr "Aggiornamento alla"
#~ msgid "Updating"
#~ msgstr "Aggiornamento"
#~ msgid "Updating Language Files..."
#~ msgstr "Aggiornamento file delle lingue..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Aggiornamento file WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Widescreen"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Il Controllo Genitori non è attivo. Se vuoi utilizzare il Controllo Genitori abilitalo nelle Impostazioni della Wii."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Potrebbe non essere caricato correttamente se il tuo System Menu non è aggiornato."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: hosigumayuugi\n"
"Language-Team: hosigumayuugi\n"
@ -25,54 +25,15 @@ msgstr "に保存されました。使用は 自己責任でお願いします
msgid " is not on the server."
msgstr "はサーバーにありません"
msgid "0 (Everyone)"
msgstr "0(セットしない)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1(C以上を制限)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1時間"
msgid "10 min"
msgstr "10分"
msgid "2 (Teen 12+)"
msgstr "2(D以上を制限)"
msgid "20 min"
msgstr "20分"
msgid "2D Cover Path"
msgstr "2Dカバーのパス"
msgid "3 (Mature 16+)"
msgstr "3(Z以上を制限)"
msgid "3 min"
msgstr "3分"
msgid "30 min"
msgstr "30分"
msgid "3D Cover Path"
msgstr "3Dカバーのパス"
msgid "3D Covers"
msgstr "3Dカバー"
msgid "4 (Adults Only 18+)"
msgstr "4(Zを制限)"
msgid "5 min"
msgstr "5分"
msgid ">> Deleting tickets..."
msgstr ">> チケットを削除します"
@ -136,20 +97,14 @@ msgstr "GXの使用者制限が解除されました"
msgid "Alternate DOL"
msgstr "代理DOL起動"
msgid "An Error occured"
msgstr "エラーが起きました"
msgid "Anti"
msgstr "排除する"
msgid "App Language"
msgstr "使用言語"
msgid "Apr"
msgstr "4月"
msgid "Are you sure you want to enable Parent Control?"
msgstr "使用制限機能を使用しますか?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "制作者:"
msgid "AutoInit Network"
msgstr "自動接続機能"
msgid "AutoPatch"
msgstr "自動パッチ"
msgid "BCA Codes Path"
msgstr "BCAコードのパス"
@ -199,9 +151,6 @@ msgstr "使用するcIOS"
msgid "Boot?"
msgstr "起動しますか?"
msgid "Both"
msgstr "IDとリージョンを表示"
msgid "Can't be formatted"
msgstr "初期化できません"
@ -226,9 +175,6 @@ msgstr "プレイパスを変更"
msgid "Cheatfile is blank"
msgstr "チートファイルがありません"
msgid "Checking for Updates"
msgstr "最新版を確認中"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "接続失敗・・・"
msgid "Console"
msgstr "状態"
msgid "Console Default"
msgstr "GXのデフォルト"
msgid "Console Locked"
msgstr "GXはロックされています"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "GCTファイルを作成できませんでした"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "提供・協力"
msgid "Custom Paths"
msgstr "パスを変更"
msgid "Customs/Original"
msgstr "カスタムを優先"
msgid "DOL Path"
msgstr "DOLのパス"
@ -365,15 +309,9 @@ msgstr "使用するディスク画像"
msgid "Disc Artwork Path"
msgstr "ディスク画像のパス"
msgid "Disc Default"
msgstr "ディスクのデフォルト"
msgid "Disc Images"
msgstr "ディスク画像"
msgid "DiskFlip"
msgstr "ディスクの回転風"
msgid "Display"
msgstr "ゲーム情報"
@ -404,6 +342,9 @@ msgstr "ダウンロードしますか?"
msgid "Do you want to format:"
msgstr "初期化しますか?"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "既知の代替DOLを利用しますか"
@ -434,26 +375,26 @@ msgstr "ダウンロードが終了しました"
msgid "Download request failed."
msgstr "ダウンロードに失敗しました"
msgid "Downloading"
msgstr "ダウンロードします"
msgid "Downloading Page List:"
msgstr "リストをダウンロード中"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "ファイルをダウンロード中"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "画像をダウンロード中"
msgid "Dutch"
msgstr "オランダ語"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "エラー"
@ -464,9 +405,6 @@ msgstr "エラー:"
msgid "ERROR: Can't set up theme."
msgstr "テーマを適用できませんでした"
msgid "English"
msgstr "英語"
msgid "Error"
msgstr "エラー"
@ -476,15 +414,24 @@ msgstr "エラー!"
msgid "Error 002 fix"
msgstr "Error002対策"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "読み込みに失敗しました"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "転送中にエラーが発生しました"
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "解凍に失敗しました"
msgid "Failed to open partition"
msgstr "領域を開けませんでした"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "2月"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "ゲームリストの回転"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "初期化"
@ -545,15 +486,9 @@ msgstr "初期化中です、暫くお待ち下さい..."
msgid "Free Space"
msgstr "空き"
msgid "French"
msgstr "フランス語"
msgid "Full Shutdown"
msgstr "シャットダウン"
msgid "GAMEID_Gamename"
msgstr "ゲームID_ゲーム名"
msgid "GCT Cheatcodes Path"
msgstr "GCTファイルのパス"
@ -566,9 +501,6 @@ msgstr "基本設定"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "設定ファイルが見つかりません"
msgid "Game ID"
msgstr "IDのみ"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "読み込みの設定"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "リージョンのみ"
msgid "Game Size"
msgstr "サイズ"
@ -599,18 +528,12 @@ msgstr "このゲームは既にインストールされています:"
msgid "Game partition"
msgstr "ゲーム領域のみ"
msgid "Gamename [GAMEID]"
msgstr "ゲーム名 [ゲームID]"
msgid "Games"
msgstr "総ゲーム数"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "ドイツ語"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "このオプションを使用するためSDカードを挿入し
msgid "Install"
msgstr "インストール"
msgid "Install 1:1 Copy"
msgstr "フルコピー"
msgid "Install Error!"
msgstr "インストールエラー!"
@ -691,21 +611,12 @@ msgstr "タイトルをインストール...成功!"
msgid "Installing wad"
msgstr "WADをインストールします"
msgid "Invalid PIN code"
msgstr "暗証番号を間違えています"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "この情報は開発者までお知らせください"
msgid "Italian"
msgstr "イタリア語"
msgid "Jan"
msgstr "1月"
msgid "Japanese"
msgstr "日本語"
msgid "July"
msgstr "7月"
@ -718,9 +629,6 @@ msgstr "保存"
msgid "Keyboard"
msgstr "キーボードのタイプ"
msgid "Korean"
msgstr "韓国語"
msgid "Language File"
msgstr "言語ファイル"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "言語のパスを変更しました"
msgid "Left"
msgstr "左ボタンで"
msgid "Like SysMenu"
msgstr "Wiiメニュー風"
msgid "Load"
msgstr "はじめる"
msgid "Load From SD/USB"
msgstr "SD/USBからロード"
#, c-format
msgid "Load file from: %s ?"
msgstr "%sからファイルをロードしますか"
@ -752,6 +651,9 @@ msgstr "%sからファイルをロードしますか"
msgid "Load this DOL as alternate DOL?"
msgstr "このDOLを代替DOLとしてロードしますか"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "標準の言語に変更しますか"
@ -761,17 +663,8 @@ msgstr "初期設定に戻しますか"
msgid "Lock Console"
msgstr "GXをロック"
msgid "Locked"
msgstr "ロックされています"
msgid "Loop Directory"
msgstr "フォルダ内でループ"
msgid "Loop Music"
msgstr "ループさせる"
msgid "Loop Sound"
msgstr "ループさせる"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr "3月"
@ -794,15 +687,12 @@ msgstr "ループ機能"
msgid "Music Volume"
msgstr "BGMの音量"
msgid "Neither"
msgstr "非表示"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "新しいディスクが検出されました"
msgid "Next"
msgstr "左へ"
msgid "No"
msgstr "いいえ"
@ -839,12 +729,6 @@ msgstr "更新はありません"
msgid "No themes found on the site."
msgstr "テーマが見つかりません"
msgid "None"
msgstr "なし"
msgid "Normal"
msgstr "ワイド"
msgid "Not a WAD file."
msgstr "WADファイルではありません"
@ -884,9 +768,6 @@ msgstr "使わない"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "使う"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "公式サイト:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "カスタムのみ"
msgid "Only Original"
msgstr "公式のみ"
msgid "Only for Install"
msgstr "インストール中のみ"
msgid "Original/Customs"
msgstr "公式を優先"
msgid "Parental Control"
msgstr "ペアレンタルコントロール"
msgid "Parental Control disabled"
msgstr "使用制限機能を無効にしました"
msgid "Partition"
msgstr "使用する領域"
@ -947,9 +813,6 @@ msgstr "プレイ回数"
msgid "Play Next"
msgstr "次へ"
msgid "Play Once"
msgstr "一度だけ再生"
msgid "Play Previous"
msgstr "前へ"
@ -962,9 +825,6 @@ msgstr "しばらくお待ちください"
msgid "Power off the Wii"
msgstr "Wiiの電源を切る"
msgid "Prev"
msgstr "左へ"
msgid "Prompts Buttons"
msgstr "ウインドウサイズ"
@ -974,9 +834,6 @@ msgstr "発売元:"
msgid "Quick Boot"
msgstr "ワンボタン起動"
msgid "Random Directory Music"
msgstr "フォルダ内でランダム再生"
msgid "Reading WAD data... Ok!"
msgstr "WADデータの読み込み...成功!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Wiiメニューへもどる"
msgid "Right"
msgstr "右ボタンで"
msgid "Rumble"
msgstr "Wiiリモコンの振動機能"
msgid "SChinese"
msgstr "簡体中国語"
msgid "SFX Volume"
msgstr "効果音の音量"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "DOLを選択"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "9月"
@ -1085,15 +933,6 @@ msgstr "サウンド"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "サウンドとBGM"
msgid "Sound+Quiet"
msgstr "サウンドのみ"
msgid "Spanish"
msgstr "スペイン語"
msgid "Special thanks to:"
msgstr "スペシャルサンクス:"
@ -1121,24 +960,18 @@ msgstr "テーマの解凍を完了しました."
msgid "Successfully installed:"
msgstr "このゲームをインストールしました"
msgid "System Default"
msgstr "Wiiのデフォルト"
msgid "TChinese"
msgstr "繁体中国語"
msgid "TXT Cheatcodes Path"
msgstr "TXTコードのパス"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "ディレクトリがありません。作りますか?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WADファイルをインストールしましたが、SDから削除できませんでした"
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "WADのインストールはエラー:%ldで失敗しました"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "テーマを保存するパス"
@ -1152,6 +985,9 @@ msgstr "テーマのパス"
msgid "Theme Title:"
msgstr "テーマ名:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "転送を失敗しました"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USBデバイスを検出できませんでした"
msgid "USB Loader GX is protected"
msgstr "USB Loaderは保護されています"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "ダウンロード中のためWADを開けません (%s)."
msgid "Uninstall"
msgstr "アンインストール"
@ -1201,15 +1039,12 @@ msgstr "WADをアンインストール"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "使用制限機能を解除"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "ロックを解除してください"
msgid "Unlocked"
msgstr "ロックされていません"
msgid "Unsupported format, try to extract manually."
msgstr "非対応の形式なので自己解凍してください"
@ -1234,21 +1069,12 @@ msgstr "全言語ファイルを更新"
msgid "Update failed"
msgstr "更新に失敗しました"
msgid "Update to"
msgstr "最新版:"
msgid "Updating"
msgstr "更新中 -"
msgid "Updating Language Files..."
msgstr "言語ファイルを更新中..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "言語ファイルを更新中:"
msgid "Updating WiiTDB.zip"
msgstr "WiiTDB.zipを更新中"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "インストール済みディレクトリにZIPを送信しました"
@ -1280,9 +1106,6 @@ msgstr "何を更新しますか?"
msgid "WiFi Features"
msgstr "ネットワーク対応"
msgid "Widescreen Fix"
msgstr "普通"
msgid "Wii Menu"
msgstr "Wiiメニューへ"
@ -1310,9 +1133,6 @@ msgstr "はい"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Wii本体設定で使用制限機能を有効にしてください"
msgid "You need to select or format a partition"
msgstr "領域を選択するか初期化してください"
@ -1377,6 +1197,225 @@ msgstr "中"
msgid "seconds left"
msgstr "秒で完了"
#~ msgid "Install 1:1 Copy"
#~ msgstr "フルコピー"
#~ msgid "0 (Everyone)"
#~ msgstr "0(セットしない)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1(C以上を制限)"
#~ msgid "1 hour"
#~ msgstr "1時間"
#~ msgid "10 min"
#~ msgstr "10分"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2(D以上を制限)"
#~ msgid "20 min"
#~ msgstr "20分"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3(Z以上を制限)"
#~ msgid "3 min"
#~ msgstr "3分"
#~ msgid "30 min"
#~ msgstr "30分"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4(Zを制限)"
#~ msgid "5 min"
#~ msgstr "5分"
#~ msgid "An Error occured"
#~ msgstr "エラーが起きました"
#~ msgid "Anti"
#~ msgstr "排除する"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "使用制限機能を使用しますか?"
#~ msgid "AutoPatch"
#~ msgstr "自動パッチ"
#~ msgid "Both"
#~ msgstr "IDとリージョンを表示"
#~ msgid "Checking for Updates"
#~ msgstr "最新版を確認中"
#~ msgid "Console Default"
#~ msgstr "GXのデフォルト"
#~ msgid "Customs/Original"
#~ msgstr "カスタムを優先"
#~ msgid "Disc Default"
#~ msgstr "ディスクのデフォルト"
#~ msgid "DiskFlip"
#~ msgstr "ディスクの回転風"
#~ msgid "Downloading"
#~ msgstr "ダウンロードします"
#~ msgid "Dutch"
#~ msgstr "オランダ語"
#~ msgid "English"
#~ msgstr "英語"
#~ msgid "French"
#~ msgstr "フランス語"
#~ msgid "GAMEID_Gamename"
#~ msgstr "ゲームID_ゲーム名"
#~ msgid "Game ID"
#~ msgstr "IDのみ"
#~ msgid "Game Region"
#~ msgstr "リージョンのみ"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "ゲーム名 [ゲームID]"
#~ msgid "German"
#~ msgstr "ドイツ語"
#~ msgid "Invalid PIN code"
#~ msgstr "暗証番号を間違えています"
#~ msgid "Italian"
#~ msgstr "イタリア語"
#~ msgid "Japanese"
#~ msgstr "日本語"
#~ msgid "Korean"
#~ msgstr "韓国語"
#~ msgid "Left"
#~ msgstr "左ボタンで"
#~ msgid "Like SysMenu"
#~ msgstr "Wiiメニュー風"
#~ msgid "Load From SD/USB"
#~ msgstr "SD/USBからロード"
#~ msgid "Locked"
#~ msgstr "ロックされています"
#~ msgid "Loop Directory"
#~ msgstr "フォルダ内でループ"
#~ msgid "Loop Music"
#~ msgstr "ループさせる"
#~ msgid "Loop Sound"
#~ msgstr "ループさせる"
#~ msgid "Neither"
#~ msgstr "非表示"
#~ msgid "Next"
#~ msgstr "左へ"
#~ msgid "None"
#~ msgstr "なし"
#~ msgid "Normal"
#~ msgstr "ワイド"
#~ msgid "ON"
#~ msgstr "使う"
#~ msgid "Only Customs"
#~ msgstr "カスタムのみ"
#~ msgid "Only Original"
#~ msgstr "公式のみ"
#~ msgid "Only for Install"
#~ msgstr "インストール中のみ"
#~ msgid "Original/Customs"
#~ msgstr "公式を優先"
#~ msgid "Parental Control disabled"
#~ msgstr "使用制限機能を無効にしました"
#~ msgid "Play Once"
#~ msgstr "一度だけ再生"
#~ msgid "Prev"
#~ msgstr "左へ"
#~ msgid "Random Directory Music"
#~ msgstr "フォルダ内でランダム再生"
#~ msgid "Right"
#~ msgstr "右ボタンで"
#~ msgid "SChinese"
#~ msgstr "簡体中国語"
#~ msgid "Sound+BGM"
#~ msgstr "サウンドとBGM"
#~ msgid "Sound+Quiet"
#~ msgstr "サウンドのみ"
#~ msgid "Spanish"
#~ msgstr "スペイン語"
#~ msgid "System Default"
#~ msgstr "Wiiのデフォルト"
#~ msgid "TChinese"
#~ msgstr "繁体中国語"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WADファイルをインストールしましたが、SDから削除できませんでした"
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "WADのインストールはエラー:%ldで失敗しました"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "ダウンロード中のためWADを開けません (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "使用制限機能を解除"
#~ msgid "Unlocked"
#~ msgstr "ロックされていません"
#~ msgid "Update to"
#~ msgstr "最新版:"
#~ msgid "Updating"
#~ msgstr "更新中 -"
#~ msgid "Updating Language Files..."
#~ msgstr "言語ファイルを更新中..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "WiiTDB.zipを更新中"
#~ msgid "Widescreen Fix"
#~ msgstr "普通"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Wii本体設定で使用制限機能を有効にしてください"
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Wiiが更新されていなければ正常に起動できない可能性があります"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nextos@korea.com\n"
"Language-Team: \n"
@ -25,54 +25,15 @@ msgstr " 저장됨. 문자는 검증되지 않았음. 몇몇의 코드는 정상
msgid " is not on the server."
msgstr " 은 서버에 없어요."
msgid "0 (Everyone)"
msgstr "0 (모두다)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (7세 이상)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 시간"
msgid "10 min"
msgstr "10 분"
msgid "2 (Teen 12+)"
msgstr "2 (12세 이상)"
msgid "20 min"
msgstr "20 분"
msgid "2D Cover Path"
msgstr "2D 표지 경로"
msgid "3 (Mature 16+)"
msgstr "3 (16세 이상)"
msgid "3 min"
msgstr "3 분"
msgid "30 min"
msgstr "30 분"
msgid "3D Cover Path"
msgstr "3D 표지 경로"
msgid "3D Covers"
msgstr "3D 커버"
msgid "4 (Adults Only 18+)"
msgstr "4 (성인 18세 이상)"
msgid "5 min"
msgstr "5 분"
msgid ">> Deleting tickets..."
msgstr ">> 티켓 삭제중..."
@ -136,19 +97,13 @@ msgstr "모든 USB로더 GX 기능 잠금 해제."
msgid "Alternate DOL"
msgstr "Alternate DOL"
msgid "An Error occured"
msgstr "에러 발생"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "USB 로더 언어"
msgid "Apr"
msgstr "4월"
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "자동네트웍설정"
msgid "AutoPatch"
msgstr "자동 패치"
msgid "BCA Codes Path"
msgstr ""
@ -199,9 +151,6 @@ msgstr "기본 부팅설정"
msgid "Boot?"
msgstr "부팅?"
msgid "Both"
msgstr "둘다"
msgid "Can't be formatted"
msgstr "포맷할 수 없습니다."
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "치트화일 내용없음"
msgid "Checking for Updates"
msgstr "업데이트 확인"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "콘솔"
msgid "Console Default"
msgstr "콘솔 기본값"
msgid "Console Locked"
msgstr "콘솔 잠김"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "GCT 파일을 생성할수 없음"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Credits"
msgid "Custom Paths"
msgstr "Custom Paths"
msgid "Customs/Original"
msgstr "커스텀/오리지널"
msgid "DOL Path"
msgstr "DOL 패치"
@ -365,15 +309,9 @@ msgstr "디스크 이미지 다운로드"
msgid "Disc Artwork Path"
msgstr "디스크 이미지 경로"
msgid "Disc Default"
msgstr "디스크 기본값"
msgid "Disc Images"
msgstr "디스크 이미지"
msgid "DiskFlip"
msgstr "디스크 플립"
msgid "Display"
msgstr "화면 표시"
@ -404,6 +342,9 @@ msgstr ""
msgid "Do you want to format:"
msgstr "포맷하겠습니까:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "정말로 Alt. DOL을 사용할까요?"
@ -434,26 +375,26 @@ msgstr "다운로드 완료"
msgid "Download request failed."
msgstr ""
msgid "Downloading"
msgstr "다운로딩중"
msgid "Downloading Page List:"
msgstr ""
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "파일 다운로드 중:"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr ""
msgid "Dutch"
msgstr "네덜란드어"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "에러"
@ -464,9 +405,6 @@ msgstr "에러:"
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr "영어"
msgid "Error"
msgstr "에러"
@ -476,15 +414,24 @@ msgstr "에러 !"
msgid "Error 002 fix"
msgstr "Error 002 fix"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "디스크 읽기 오류"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "데이터 전송중 에러."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr ""
msgid "Failed to open partition"
msgstr "파티션 열기 실패"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "2월"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "좌/우 설정"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "포맷"
@ -545,15 +486,9 @@ msgstr "포맷 중. 기다려 주세요..."
msgid "Free Space"
msgstr "여유 공간"
msgid "French"
msgstr "불어"
msgid "Full Shutdown"
msgstr "완전히 끄기"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "치트코드 경로"
@ -566,9 +501,6 @@ msgstr "GUI 설정"
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr "게임 ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "게임 로드"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "지역"
msgid "Game Size"
msgstr "게임 용량"
@ -599,18 +528,12 @@ msgstr "게임이 이미 설치되어 있습니다."
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "게임"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "독일어"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "이 옵션을 사용할 SD카드를 넣으세요."
msgid "Install"
msgstr "설치"
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr "설치 에러!"
@ -691,21 +611,12 @@ msgstr "타이틀 설치중... Ok!"
msgid "Installing wad"
msgstr "Wad 설치중"
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "우리를 도울수 있는 정보를 가지고 있군요. 이정보를 DEV 팀에 전달해주세요."
msgid "Italian"
msgstr "이태리어"
msgid "Jan"
msgstr "1월"
msgid "Japanese"
msgstr "일본어"
msgid "July"
msgstr "7월"
@ -718,9 +629,6 @@ msgstr "보관"
msgid "Keyboard"
msgstr "키보드"
msgid "Korean"
msgstr "한국어"
msgid "Language File"
msgstr "언어화일"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "언어경로 변경됨."
msgid "Left"
msgstr "왼쪽"
msgid "Like SysMenu"
msgstr "시스템 메뉴처럼"
msgid "Load"
msgstr "로드"
msgid "Load From SD/USB"
msgstr ""
#, c-format
msgid "Load file from: %s ?"
msgstr "화일 로드는 %s 에서?"
@ -752,6 +651,9 @@ msgstr "화일 로드는 %s 에서?"
msgid "Load this DOL as alternate DOL?"
msgstr "이 DOL화일을 alternate DOL로 로딩할까요?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "표준 언어로 로딩."
@ -761,16 +663,7 @@ msgstr "표중 음악으로 로딩."
msgid "Lock Console"
msgstr "콘솔 잠금"
msgid "Locked"
msgstr "잠김"
msgid "Loop Directory"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "음량"
msgid "Neither"
msgstr "표시 없음"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr ""
msgid "Next"
msgstr "다음"
msgid "No"
msgstr "아니오"
@ -839,12 +729,6 @@ msgstr "새로운 업데이트 없음."
msgid "No themes found on the site."
msgstr ""
msgid "None"
msgstr ""
msgid "Normal"
msgstr "일반"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "꺼짐"
msgid "OK"
msgstr "확인"
msgid "ON"
msgstr "켜짐"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "공식 사이트:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "사용자 설정만"
msgid "Only Original"
msgstr "원본만"
msgid "Only for Install"
msgstr "인스톨만"
msgid "Original/Customs"
msgstr "원본/사용자설정"
msgid "Parental Control"
msgstr "자녀보호기능"
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr "파티션"
@ -947,9 +813,6 @@ msgstr "실행 횟수"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr ""
msgid "Power off the Wii"
msgstr "Wii 전원 끄기"
msgid "Prev"
msgstr "이전"
msgid "Prompts Buttons"
msgstr "프롬프트/버튼"
@ -974,9 +834,6 @@ msgstr "출판자"
msgid "Quick Boot"
msgstr "게임 바로실행"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "WAD 데이터 읽기... 성공!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "위 메뉴로 돌아가기"
msgid "Right"
msgstr "오른쪽"
msgid "Rumble"
msgstr "진동"
msgid "SChinese"
msgstr "중국어(간체)"
msgid "SFX Volume"
msgstr "SFX 볼륨"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr ""
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "9월"
@ -1085,15 +933,6 @@ msgstr "소리"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr ""
msgid "Sound+Quiet"
msgstr ""
msgid "Spanish"
msgstr "스페인어"
msgid "Special thanks to:"
msgstr "Special thanks to:"
@ -1121,24 +960,18 @@ msgstr ""
msgid "Successfully installed:"
msgstr "설치 성공:"
msgid "System Default"
msgstr "시스템 기본값"
msgid "TChinese"
msgstr "중국어(번체)"
msgid "TXT Cheatcodes Path"
msgstr "TXT 치트코드 경로"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr ""
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WAD화일이 인스톨됨. 하지만 SD 카드에서 삭제할수 없음."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "WAD 인스톨 실패 에러 %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr ""
@ -1152,6 +985,9 @@ msgstr "테마 경로"
msgid "Theme Title:"
msgstr ""
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr ""
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB 장치가 없습니다."
msgid "USB Loader GX is protected"
msgstr "USB 로더 GX 잠김 상태"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "방금 다운로드한 wad화일(%s)을 열수가 없음."
msgid "Uninstall"
msgstr "제거"
@ -1201,15 +1039,12 @@ msgstr "WAD 언인스톨"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "이 옵션을 사용하기 위해 콘솔을 잠금해제"
msgid "Unlocked"
msgstr "잠금해제"
msgid "Unsupported format, try to extract manually."
msgstr ""
@ -1234,21 +1069,12 @@ msgstr "모든 언어화일 업데이트"
msgid "Update failed"
msgstr "업데이트 실패"
msgid "Update to"
msgstr "감사"
msgid "Updating"
msgstr "업데이트중"
msgid "Updating Language Files..."
msgstr "언어화일 업데이트중..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "언어화일 업데이트중:"
msgid "Updating WiiTDB.zip"
msgstr "WiiTDB.zip 업데이트중"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr ""
@ -1280,9 +1106,6 @@ msgstr "무엇을 업데이트 할까요?"
msgid "WiFi Features"
msgstr "WiFi 형태"
msgid "Widescreen Fix"
msgstr "와이드 스크린에 맞춤"
msgid "Wii Menu"
msgstr "Wii 메뉴로"
@ -1310,9 +1133,6 @@ msgstr "예"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr ""
@ -1377,6 +1197,171 @@ msgstr "중"
msgid "seconds left"
msgstr "초 남았습니다"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (모두다)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (7세 이상)"
#~ msgid "1 hour"
#~ msgstr "1 시간"
#~ msgid "10 min"
#~ msgstr "10 분"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (12세 이상)"
#~ msgid "20 min"
#~ msgstr "20 분"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (16세 이상)"
#~ msgid "3 min"
#~ msgstr "3 분"
#~ msgid "30 min"
#~ msgstr "30 분"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (성인 18세 이상)"
#~ msgid "5 min"
#~ msgstr "5 분"
#~ msgid "An Error occured"
#~ msgstr "에러 발생"
#~ msgid "AutoPatch"
#~ msgstr "자동 패치"
#~ msgid "Both"
#~ msgstr "둘다"
#~ msgid "Checking for Updates"
#~ msgstr "업데이트 확인"
#~ msgid "Console Default"
#~ msgstr "콘솔 기본값"
#~ msgid "Customs/Original"
#~ msgstr "커스텀/오리지널"
#~ msgid "Disc Default"
#~ msgstr "디스크 기본값"
#~ msgid "DiskFlip"
#~ msgstr "디스크 플립"
#~ msgid "Downloading"
#~ msgstr "다운로딩중"
#~ msgid "Dutch"
#~ msgstr "네덜란드어"
#~ msgid "English"
#~ msgstr "영어"
#~ msgid "French"
#~ msgstr "불어"
#~ msgid "Game ID"
#~ msgstr "게임 ID"
#~ msgid "Game Region"
#~ msgstr "지역"
#~ msgid "German"
#~ msgstr "독일어"
#~ msgid "Italian"
#~ msgstr "이태리어"
#~ msgid "Japanese"
#~ msgstr "일본어"
#~ msgid "Korean"
#~ msgstr "한국어"
#~ msgid "Left"
#~ msgstr "왼쪽"
#~ msgid "Like SysMenu"
#~ msgstr "시스템 메뉴처럼"
#~ msgid "Locked"
#~ msgstr "잠김"
#~ msgid "Neither"
#~ msgstr "표시 없음"
#~ msgid "Next"
#~ msgstr "다음"
#~ msgid "Normal"
#~ msgstr "일반"
#~ msgid "ON"
#~ msgstr "켜짐"
#~ msgid "Only Customs"
#~ msgstr "사용자 설정만"
#~ msgid "Only Original"
#~ msgstr "원본만"
#~ msgid "Only for Install"
#~ msgstr "인스톨만"
#~ msgid "Original/Customs"
#~ msgstr "원본/사용자설정"
#~ msgid "Prev"
#~ msgstr "이전"
#~ msgid "Right"
#~ msgstr "오른쪽"
#~ msgid "SChinese"
#~ msgstr "중국어(간체)"
#~ msgid "Spanish"
#~ msgstr "스페인어"
#~ msgid "System Default"
#~ msgstr "시스템 기본값"
#~ msgid "TChinese"
#~ msgstr "중국어(번체)"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WAD화일이 인스톨됨. 하지만 SD 카드에서 삭제할수 없음."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "WAD 인스톨 실패 에러 %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "방금 다운로드한 wad화일(%s)을 열수가 없음."
#~ msgid "Unlocked"
#~ msgstr "잠금해제"
#~ msgid "Update to"
#~ msgstr "감사"
#~ msgid "Updating"
#~ msgstr "업데이트중"
#~ msgid "Updating Language Files..."
#~ msgstr "언어화일 업데이트중..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "WiiTDB.zip 업데이트중"
#~ msgid "Widescreen Fix"
#~ msgstr "와이드 스크린에 맞춤"
#~ msgid "Back to Wii Menu"
#~ msgstr "Wii 메뉴로 놀아가기"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: raschi\n"
"Language-Team: raschi\n"
@ -25,54 +25,15 @@ msgstr " har blitt lagret. Teksten har ikke blitt verifisert. Noe av koden vil
msgid " is not on the server."
msgstr " finnes ikke på serveren."
msgid "0 (Everyone)"
msgstr "0 (Alle)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Barn 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 time"
msgid "10 min"
msgstr ""
msgid "2 (Teen 12+)"
msgstr "2 (Ungdom 12+)"
msgid "20 min"
msgstr ""
msgid "2D Cover Path"
msgstr "2D Cover sti"
msgid "3 (Mature 16+)"
msgstr "3 (Ungdom 16+)"
msgid "3 min"
msgstr ""
msgid "30 min"
msgstr ""
msgid "3D Cover Path"
msgstr "3D Cover sti"
msgid "3D Covers"
msgstr "3D cover"
msgid "4 (Adults Only 18+)"
msgstr "4 (Voksen 18+)"
msgid "5 min"
msgstr ""
msgid ">> Deleting tickets..."
msgstr ">> Sletter tickets..."
@ -136,19 +97,13 @@ msgstr "Alle funksjonene til USB Loader GX er opplåst."
msgid "Alternate DOL"
msgstr "Alternativ DOL"
msgid "An Error occured"
msgstr "En feil oppstod"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Program språk"
msgid "Apr"
msgstr ""
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr "Forfatter:"
msgid "AutoInit Network"
msgstr "Autostart nettverk"
msgid "AutoPatch"
msgstr ""
msgid "BCA Codes Path"
msgstr ""
@ -199,9 +151,6 @@ msgstr "Boot/Standard"
msgid "Boot?"
msgstr "Start?"
msgid "Both"
msgstr "Begge"
msgid "Can't be formatted"
msgstr "Kan ikke formateres"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "Juksefil er blank"
msgid "Checking for Updates"
msgstr "Søker etter oppdateringer"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "Konsoll"
msgid "Console Default"
msgstr "Konsoll Standard"
msgid "Console Locked"
msgstr "Konsoll låst"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Kan ikke opprette GCT fil"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Medvirkende"
msgid "Custom Paths"
msgstr "Endre stier"
msgid "Customs/Original"
msgstr "Custom/Original"
msgid "DOL Path"
msgstr "DOL sti"
@ -365,15 +309,9 @@ msgstr "Platebilde nedlasting"
msgid "Disc Artwork Path"
msgstr "Platebilde sti"
msgid "Disc Default"
msgstr "Spill Standard"
msgid "Disc Images"
msgstr "Plate bilder"
msgid "DiskFlip"
msgstr "Snu plate"
msgid "Display"
msgstr "Vis"
@ -404,6 +342,9 @@ msgstr "Vil du laste ned dette temaet?"
msgid "Do you want to format:"
msgstr "Vil du formatere:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Vil du bruke alt DOL filen som er kjent for å være riktig?"
@ -434,26 +375,26 @@ msgstr "Nedlasting ferdig"
msgid "Download request failed."
msgstr "Nedlast spørring feilet."
msgid "Downloading"
msgstr "Laster ned"
msgid "Downloading Page List:"
msgstr "Laster ned side liste:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Laster ned fil"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Laster ned bilde:"
msgid "Dutch"
msgstr "Nederlandsk"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "FEIL"
@ -464,9 +405,6 @@ msgstr "FEIL:"
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr "Engelsk"
msgid "Error"
msgstr "Feil"
@ -476,15 +414,24 @@ msgstr "Feil !"
msgid "Error 002 fix"
msgstr "Error 002 fiks"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Feil ved lesing av plate"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Feil ved overføring av data."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Utpakking feilet."
msgid "Failed to open partition"
msgstr "Feil ved åpning av partisjon"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr ""
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr ""
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatér"
@ -545,15 +486,9 @@ msgstr "Formaterer, vennligst vent..."
msgid "Free Space"
msgstr "Ledig plass"
msgid "French"
msgstr "Fransk"
msgid "Full Shutdown"
msgstr "Skru helt av"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "GCT Juksekode sti"
@ -566,9 +501,6 @@ msgstr "GUI innstillinger"
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr "Spill ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Lasting av spill"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Region"
msgid "Game Size"
msgstr "Spill størrelse"
@ -599,18 +528,12 @@ msgstr "Spillet er allerede installert:"
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Spill"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Tysk"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Sett inn et SD-kort for å bruke innstillingen."
msgid "Install"
msgstr "Installér"
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr "Installasjonsfeil!"
@ -691,21 +611,12 @@ msgstr "Installerer tittel... OK!"
msgid "Installing wad"
msgstr "Installerer WAD"
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Det ser ut til at du har informasjon som kan være nyttig for oss. Vennligst videresend denne informasjonen til utviklerteamet."
msgid "Italian"
msgstr "Italiensk"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japansk"
msgid "July"
msgstr "Jul"
@ -718,9 +629,6 @@ msgstr "Behold"
msgid "Keyboard"
msgstr "Tastatur"
msgid "Korean"
msgstr "Koreansk"
msgid "Language File"
msgstr "Språk Fil"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Språksti endret."
msgid "Left"
msgstr "Venstre"
msgid "Like SysMenu"
msgstr "Lik Systemmeny"
msgid "Load"
msgstr "Start"
msgid "Load From SD/USB"
msgstr "Start fra SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Start fil fra: %s ?"
@ -752,6 +651,9 @@ msgstr "Start fil fra: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Last denne DOL som alternativ DOL?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Laster standard språk."
@ -761,16 +663,7 @@ msgstr "Laster standard musikk."
msgid "Lock Console"
msgstr "Lås konsoll"
msgid "Locked"
msgstr "Låst"
msgid "Loop Directory"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Musikk volum"
msgid "Neither"
msgstr "Ingen"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Ny plate oppdaget"
msgid "Next"
msgstr "Neste"
msgid "No"
msgstr "Nei"
@ -839,12 +729,6 @@ msgstr "Ingen nye oppdateringer."
msgid "No themes found on the site."
msgstr "Ingen temaer funnet på websiden."
msgid "None"
msgstr ""
msgid "Normal"
msgstr ""
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "AV"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "PÅ"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Offisiell nettside:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Kun custom"
msgid "Only Original"
msgstr "Kun original"
msgid "Only for Install"
msgstr "Kun for installering"
msgid "Original/Customs"
msgstr "Original/Custom"
msgid "Parental Control"
msgstr "Foreldrekontroll"
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr "Partisjon"
@ -947,9 +813,6 @@ msgstr "Ganger spilt"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "Vennligst vent..."
msgid "Power off the Wii"
msgstr "Skru av Wii"
msgid "Prev"
msgstr "Forrige"
msgid "Prompts Buttons"
msgstr "Dialog knapper"
@ -974,9 +834,6 @@ msgstr "Publisert av"
msgid "Quick Boot"
msgstr "Hurtig start"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "Leser WAD data... OK!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Tilbake til Wii meny"
msgid "Right"
msgstr "Høyre"
msgid "Rumble"
msgstr "Vibrasjon"
msgid "SChinese"
msgstr "S.Kinesisk"
msgid "SFX Volume"
msgstr "Effekt volum"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Velg en DOL fil"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Sep"
@ -1085,15 +933,6 @@ msgstr "Lyd"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr ""
msgid "Sound+Quiet"
msgstr ""
msgid "Spanish"
msgstr "Spansk"
msgid "Special thanks to:"
msgstr "Spesielt takk til:"
@ -1121,24 +960,18 @@ msgstr "Vellykket utpakking av tema."
msgid "Successfully installed:"
msgstr "Vellykket installering:"
msgid "System Default"
msgstr "System Standard"
msgid "TChinese"
msgstr "T.Kinesisk"
msgid "TXT Cheatcodes Path"
msgstr "TXTjuksekode sti"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Valgt mappe finnes ikke. Vil du opprette den?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WAD filen ble installert. Men ble ikke slettet fra SD kort."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "WAD installasjonen feilet med feilkode %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Tema nedlasting sti"
@ -1152,6 +985,9 @@ msgstr "Tema sti"
msgid "Theme Title:"
msgstr "Tema tittel:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Overføring feilet."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB enhet ikke funnet"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX er beskyttet"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Kan ikke åpne nedlastet WAD fil (%s)."
msgid "Uninstall"
msgstr "Avinstallér"
@ -1201,15 +1039,12 @@ msgstr "Avinstallerer WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Lås opp konsollen for å bruke denne innstillingen."
msgid "Unlocked"
msgstr "Opplåst"
msgid "Unsupported format, try to extract manually."
msgstr "Format ikke støttet, prøv å pakk ut manuelt."
@ -1234,21 +1069,12 @@ msgstr "Oppdater alle språkfiler"
msgid "Update failed"
msgstr "Mislykket oppdatering"
msgid "Update to"
msgstr "Oppdater til"
msgid "Updating"
msgstr "Oppdaterer"
msgid "Updating Language Files..."
msgstr "Oppdaterer språkfiler..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Oppdaterer språkfiler:"
msgid "Updating WiiTDB.zip"
msgstr "Oppdaterer WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Opplastet ZIP fil installert i homebrew mappen."
@ -1280,9 +1106,6 @@ msgstr "Hva vil du oppdatere?"
msgid "WiFi Features"
msgstr "WiFi egenskaper"
msgid "Widescreen Fix"
msgstr "Widescreen fiks"
msgid "Wii Menu"
msgstr "Wii Meny"
@ -1310,9 +1133,6 @@ msgstr "Ja"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr ""
@ -1377,6 +1197,153 @@ msgstr "av"
msgid "seconds left"
msgstr "sekunder gjenstår"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Alle)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Barn 7+)"
#~ msgid "1 hour"
#~ msgstr "1 time"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Ungdom 12+)"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Ungdom 16+)"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Voksen 18+)"
#~ msgid "An Error occured"
#~ msgstr "En feil oppstod"
#~ msgid "Both"
#~ msgstr "Begge"
#~ msgid "Checking for Updates"
#~ msgstr "Søker etter oppdateringer"
#~ msgid "Console Default"
#~ msgstr "Konsoll Standard"
#~ msgid "Customs/Original"
#~ msgstr "Custom/Original"
#~ msgid "Disc Default"
#~ msgstr "Spill Standard"
#~ msgid "DiskFlip"
#~ msgstr "Snu plate"
#~ msgid "Downloading"
#~ msgstr "Laster ned"
#~ msgid "Dutch"
#~ msgstr "Nederlandsk"
#~ msgid "English"
#~ msgstr "Engelsk"
#~ msgid "French"
#~ msgstr "Fransk"
#~ msgid "Game ID"
#~ msgstr "Spill ID"
#~ msgid "Game Region"
#~ msgstr "Region"
#~ msgid "German"
#~ msgstr "Tysk"
#~ msgid "Italian"
#~ msgstr "Italiensk"
#~ msgid "Japanese"
#~ msgstr "Japansk"
#~ msgid "Korean"
#~ msgstr "Koreansk"
#~ msgid "Left"
#~ msgstr "Venstre"
#~ msgid "Like SysMenu"
#~ msgstr "Lik Systemmeny"
#~ msgid "Load From SD/USB"
#~ msgstr "Start fra SD/USB"
#~ msgid "Locked"
#~ msgstr "Låst"
#~ msgid "Neither"
#~ msgstr "Ingen"
#~ msgid "Next"
#~ msgstr "Neste"
#~ msgid "ON"
#~ msgstr "PÅ"
#~ msgid "Only Customs"
#~ msgstr "Kun custom"
#~ msgid "Only Original"
#~ msgstr "Kun original"
#~ msgid "Only for Install"
#~ msgstr "Kun for installering"
#~ msgid "Original/Customs"
#~ msgstr "Original/Custom"
#~ msgid "Prev"
#~ msgstr "Forrige"
#~ msgid "Right"
#~ msgstr "Høyre"
#~ msgid "SChinese"
#~ msgstr "S.Kinesisk"
#~ msgid "Spanish"
#~ msgstr "Spansk"
#~ msgid "System Default"
#~ msgstr "System Standard"
#~ msgid "TChinese"
#~ msgstr "T.Kinesisk"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WAD filen ble installert. Men ble ikke slettet fra SD kort."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "WAD installasjonen feilet med feilkode %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Kan ikke åpne nedlastet WAD fil (%s)."
#~ msgid "Unlocked"
#~ msgstr "Opplåst"
#~ msgid "Update to"
#~ msgstr "Oppdater til"
#~ msgid "Updating"
#~ msgstr "Oppdaterer"
#~ msgid "Updating Language Files..."
#~ msgstr "Oppdaterer språkfiler..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Oppdaterer WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Widescreen fiks"
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s vil kanskje ikke starte riktig hvis System Menyen ikke er oppdatert."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: ziom666 (zadania_prog@vp.pl)\n"
"Language-Team: \n"
@ -25,54 +25,15 @@ msgstr " zapisano. Plik tekstowy nie zostal zweryfikowany. Niektore z kodow, mog
msgid " is not on the server."
msgstr " nie istnieje na serwerze"
msgid "0 (Everyone)"
msgstr "0 (dla kazdego)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (dziecko 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 godzina"
msgid "10 min"
msgstr ""
msgid "2 (Teen 12+)"
msgstr "2 (mlodziez 12+)"
msgid "20 min"
msgstr ""
msgid "2D Cover Path"
msgstr "Sciezka okladek 2D"
msgid "3 (Mature 16+)"
msgstr "3 (dojrzaly 16+)"
msgid "3 min"
msgstr ""
msgid "30 min"
msgstr ""
msgid "3D Cover Path"
msgstr "Sciezka okladek 3D"
msgid "3D Covers"
msgstr "Okladki 3D"
msgid "4 (Adults Only 18+)"
msgstr "4 (tylko dla doroslych 18+)"
msgid "5 min"
msgstr ""
msgid ">> Deleting tickets..."
msgstr ">> Usuwanie ticketu..."
@ -136,20 +97,14 @@ msgstr "USB Loader GX odblokowany"
msgid "Alternate DOL"
msgstr "Alternatywny DOL"
msgid "An Error occured"
msgstr "Wystapil blad"
msgid "Anti"
msgstr "Anty"
msgid "App Language"
msgstr "Jezyk"
msgid "Apr"
msgstr "Kwiecien"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Czy na pewno wlaczyc kontrole rodzicielska?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Autor: "
msgid "AutoInit Network"
msgstr "Autoinicjalizacja sieci"
msgid "AutoPatch"
msgstr "Automatyczny patch"
msgid "BCA Codes Path"
msgstr "Sciezka kodow BCA"
@ -199,9 +151,6 @@ msgstr ""
msgid "Boot?"
msgstr ""
msgid "Both"
msgstr "Oba"
msgid "Can't be formatted"
msgstr "Nie mozna sformatowac"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "Plik z kodami pusty"
msgid "Checking for Updates"
msgstr "Sprawdzanie aktualizacji"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Utracono polaczenie..."
msgid "Console"
msgstr "Konsola"
msgid "Console Default"
msgstr "Domyslne ustawienia konsoli"
msgid "Console Locked"
msgstr "Konsola zablokowana"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Nie udalo sie stworzyc pliku GCT"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr ""
msgid "Custom Paths"
msgstr "Sciezki"
msgid "Customs/Original"
msgstr ""
msgid "DOL Path"
msgstr "Sciezka plikow .DOL"
@ -365,15 +309,9 @@ msgstr "Pobierz obrazki"
msgid "Disc Artwork Path"
msgstr "Sciezka do obrazkow plyt"
msgid "Disc Default"
msgstr "Domyslny dysk"
msgid "Disc Images"
msgstr "Obrazki plyt"
msgid "DiskFlip"
msgstr "Obrot plytami"
msgid "Display"
msgstr "Wyswietl"
@ -404,6 +342,9 @@ msgstr "Pobrac temat?"
msgid "Do you want to format:"
msgstr "Sformatowac:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Uzyc alternatywnego pliku DOL?"
@ -434,26 +375,26 @@ msgstr "Zakonczono pobieranie"
msgid "Download request failed."
msgstr "Prosba pobierania nieudana"
msgid "Downloading"
msgstr "Trwa pobieranie"
msgid "Downloading Page List:"
msgstr "Pobieranie listy stron:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Pobieranie pliku"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Pobieranie obrazka:"
msgid "Dutch"
msgstr "holenderski"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "Blad"
@ -464,9 +405,6 @@ msgstr "Blad:"
msgid "ERROR: Can't set up theme."
msgstr "Blad: nie mozna ustawic tematu"
msgid "English"
msgstr "angielski"
msgid "Error"
msgstr "Blad"
@ -476,15 +414,24 @@ msgstr "Blad !"
msgid "Error 002 fix"
msgstr "Poprawka bledu 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Blad odczytu plyty"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Blad podczas transferu danych"
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Nie udalo sie rozpakowac"
msgid "Failed to open partition"
msgstr "Nie udalo sie otworzyc partycji"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Luty"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Obrot na osi X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Sformatuj"
@ -545,15 +486,9 @@ msgstr "Formatowanie, prosze czekac..."
msgid "Free Space"
msgstr "Wolnego miejsca"
msgid "French"
msgstr "francuski"
msgid "Full Shutdown"
msgstr "Pelne zamkniecie"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "Sciezka kodow GCT"
@ -566,9 +501,6 @@ msgstr "Ustawienia interfejsu graficznego"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "Nie znaleziono pliku GXtheme.cfg"
msgid "Game ID"
msgstr "ID gry"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Zaladuj gre"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Region"
msgid "Game Size"
msgstr "Rozmiar gry"
@ -599,18 +528,12 @@ msgstr "Gra jest juz zainstalowana:"
msgid "Game partition"
msgstr "Partycje z grami"
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Liczba gier"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "niemiecki"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Wloz karte SD, aby uzyc tej opcji"
msgid "Install"
msgstr "Zainstaluj"
msgid "Install 1:1 Copy"
msgstr "Zainstaluj kopie 1:1"
msgid "Install Error!"
msgstr "Blad instalacji"
@ -691,21 +611,12 @@ msgstr "Instalowanie tytulu... Ok!"
msgid "Installing wad"
msgstr "Instalowanie wad"
msgid "Invalid PIN code"
msgstr "Bledny kod PIN"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr ""
msgid "Italian"
msgstr "wloski"
msgid "Jan"
msgstr "Styczen"
msgid "Japanese"
msgstr "japonski"
msgid "July"
msgstr "lipiec"
@ -718,9 +629,6 @@ msgstr "Trzymaj"
msgid "Keyboard"
msgstr "Klawiatura"
msgid "Korean"
msgstr "koreanski"
msgid "Language File"
msgstr "Plik jezykowy"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Sciezka do plikow jezykowych zmieniona"
msgid "Left"
msgstr "Lewo"
msgid "Like SysMenu"
msgstr "Podobnie do menu systemowego"
msgid "Load"
msgstr "Zaladuj"
msgid "Load From SD/USB"
msgstr "Zaladuj z SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Zaladowac plik z: %s ?"
@ -752,6 +651,9 @@ msgstr "Zaladowac plik z: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Zaladowac ten DOL jako alternatywnt?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "ladowanie standardowego jezyka."
@ -761,18 +663,9 @@ msgstr "ladowanie standardowej muzyki"
msgid "Lock Console"
msgstr "Zablokuj konsole"
msgid "Locked"
msgstr "Zablokowano"
msgid "Loop Directory"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgstr "Zapetl dzwieki"
msgid "Mar"
msgstr "Marzec"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Poziom glosnosci"
msgid "Neither"
msgstr "zadne"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Wykryto nowy dysk"
msgid "Next"
msgstr "nastepny"
msgid "No"
msgstr "Nie"
@ -839,12 +729,6 @@ msgstr "Posiadasz aktualna wersje"
msgid "No themes found on the site."
msgstr "Nie znaleziono tematow na tej stronie"
msgid "None"
msgstr ""
msgid "Normal"
msgstr "Standardowe"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "Wylacz"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Wlacz"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Strona oficjalna:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Tylko nieoryginalne"
msgid "Only Original"
msgstr "Tylko oryginalne"
msgid "Only for Install"
msgstr "Tylko dla instalacji"
msgid "Original/Customs"
msgstr "Mieszane"
msgid "Parental Control"
msgstr "Kontrola rodzicielska"
msgid "Parental Control disabled"
msgstr "Kontrola rodzicielska wylaczona"
msgid "Partition"
msgstr "Partycja"
@ -947,9 +813,6 @@ msgstr "Licznik"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "Prosze czekac..."
msgid "Power off the Wii"
msgstr "Wylacz Wii"
msgid "Prev"
msgstr "Poprzedni"
msgid "Prompts Buttons"
msgstr ""
@ -974,9 +834,6 @@ msgstr ""
msgid "Quick Boot"
msgstr "Szybkie ladowanie"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "Odczyt danych WAD...Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Powrot do Wii Menu"
msgid "Right"
msgstr "Prawo"
msgid "Rumble"
msgstr "Wibracje"
msgid "SChinese"
msgstr "uproszczony chinski"
msgid "SFX Volume"
msgstr "Poziom glosnosci SFX"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Wybierz plik DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Wrzesien"
@ -1085,15 +933,6 @@ msgstr "Dzwiek"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Dzwieki i muzyka w tle"
msgid "Sound+Quiet"
msgstr "Dzwieki i cisza"
msgid "Spanish"
msgstr "hiszpanski"
msgid "Special thanks to:"
msgstr "Specjalne podziekowania"
@ -1121,24 +960,18 @@ msgstr "Pomyslnie rozpakowano temat."
msgid "Successfully installed:"
msgstr "Pomyslnie zainstalowano:"
msgid "System Default"
msgstr "Domyslne ustawienia systemowe"
msgid "TChinese"
msgstr "chinski"
msgid "TXT Cheatcodes Path"
msgstr "Sciezka kodow TXT"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Katalog nie istnieje. Utworzyc?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "Zainstalowano plik wad, ale nie mozna go usunac z karty SD"
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "Instalacja wad zakonczona bledek %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Sciezka tematow"
@ -1152,6 +985,9 @@ msgstr "Sciezka skorek"
msgid "Theme Title:"
msgstr "Tytul:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Niepowodzenie."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "Nie znaleziono urzadzenia USB"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX zabezpieczony"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Nie udalo sie zainstalowac dopiero co pobranego pliku (%s)"
msgid "Uninstall"
msgstr "Odinstaluj"
@ -1201,15 +1039,12 @@ msgstr "Odinstalowywanie wad"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Odblokuj kontrole rodzicielska"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Odblokuj konsole, aby uzyc tej opcji"
msgid "Unlocked"
msgstr "Odblokowano"
msgid "Unsupported format, try to extract manually."
msgstr "Niewspierany format, sprobuj rozpakowac recznie"
@ -1234,21 +1069,12 @@ msgstr "Zaktualizuj wszystkie pliki jezykowe"
msgid "Update failed"
msgstr "Nie udalo sie zaktualizowac"
msgid "Update to"
msgstr "Aktualizuj do"
msgid "Updating"
msgstr "Aktualizowanie"
msgid "Updating Language Files..."
msgstr "Aktualizacja plikow jezykowych..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Aktualizacja plikow jezykowych:"
msgid "Updating WiiTDB.zip"
msgstr "Aktualizacja WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Wyslany plik ZIP zainstalowano w katalogu homebrew"
@ -1280,9 +1106,6 @@ msgstr "Rodzaj aktualizacji"
msgid "WiFi Features"
msgstr "Opcje WiFi"
msgid "Widescreen Fix"
msgstr "Popraw ekran panoramiczny"
msgid "Wii Menu"
msgstr ""
@ -1310,9 +1133,6 @@ msgstr "Tak"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Nie masz wlaczonej kontroli rodzicielskiej. Jesli chcesz jej uzywac, uruchom ja w ustawieniach Wii."
msgid "You need to select or format a partition"
msgstr "Musisz wybrac, lub sformatowac partycje"
@ -1377,6 +1197,186 @@ msgstr "z"
msgid "seconds left"
msgstr "sekund pozostalo"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Zainstaluj kopie 1:1"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (dla kazdego)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (dziecko 7+)"
#~ msgid "1 hour"
#~ msgstr "1 godzina"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (mlodziez 12+)"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (dojrzaly 16+)"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (tylko dla doroslych 18+)"
#~ msgid "An Error occured"
#~ msgstr "Wystapil blad"
#~ msgid "Anti"
#~ msgstr "Anty"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Czy na pewno wlaczyc kontrole rodzicielska?"
#~ msgid "AutoPatch"
#~ msgstr "Automatyczny patch"
#~ msgid "Both"
#~ msgstr "Oba"
#~ msgid "Checking for Updates"
#~ msgstr "Sprawdzanie aktualizacji"
#~ msgid "Console Default"
#~ msgstr "Domyslne ustawienia konsoli"
#~ msgid "Disc Default"
#~ msgstr "Domyslny dysk"
#~ msgid "DiskFlip"
#~ msgstr "Obrot plytami"
#~ msgid "Downloading"
#~ msgstr "Trwa pobieranie"
#~ msgid "Dutch"
#~ msgstr "holenderski"
#~ msgid "English"
#~ msgstr "angielski"
#~ msgid "French"
#~ msgstr "francuski"
#~ msgid "Game ID"
#~ msgstr "ID gry"
#~ msgid "Game Region"
#~ msgstr "Region"
#~ msgid "German"
#~ msgstr "niemiecki"
#~ msgid "Invalid PIN code"
#~ msgstr "Bledny kod PIN"
#~ msgid "Italian"
#~ msgstr "wloski"
#~ msgid "Japanese"
#~ msgstr "japonski"
#~ msgid "Korean"
#~ msgstr "koreanski"
#~ msgid "Left"
#~ msgstr "Lewo"
#~ msgid "Like SysMenu"
#~ msgstr "Podobnie do menu systemowego"
#~ msgid "Load From SD/USB"
#~ msgstr "Zaladuj z SD/USB"
#~ msgid "Locked"
#~ msgstr "Zablokowano"
#~ msgid "Loop Sound"
#~ msgstr "Zapetl dzwieki"
#~ msgid "Neither"
#~ msgstr "zadne"
#~ msgid "Next"
#~ msgstr "nastepny"
#~ msgid "Normal"
#~ msgstr "Standardowe"
#~ msgid "ON"
#~ msgstr "Wlacz"
#~ msgid "Only Customs"
#~ msgstr "Tylko nieoryginalne"
#~ msgid "Only Original"
#~ msgstr "Tylko oryginalne"
#~ msgid "Only for Install"
#~ msgstr "Tylko dla instalacji"
#~ msgid "Original/Customs"
#~ msgstr "Mieszane"
#~ msgid "Parental Control disabled"
#~ msgstr "Kontrola rodzicielska wylaczona"
#~ msgid "Prev"
#~ msgstr "Poprzedni"
#~ msgid "Right"
#~ msgstr "Prawo"
#~ msgid "SChinese"
#~ msgstr "uproszczony chinski"
#~ msgid "Sound+BGM"
#~ msgstr "Dzwieki i muzyka w tle"
#~ msgid "Sound+Quiet"
#~ msgstr "Dzwieki i cisza"
#~ msgid "Spanish"
#~ msgstr "hiszpanski"
#~ msgid "System Default"
#~ msgstr "Domyslne ustawienia systemowe"
#~ msgid "TChinese"
#~ msgstr "chinski"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "Zainstalowano plik wad, ale nie mozna go usunac z karty SD"
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "Instalacja wad zakonczona bledek %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Nie udalo sie zainstalowac dopiero co pobranego pliku (%s)"
#~ msgid "Unlock Parental Control"
#~ msgstr "Odblokuj kontrole rodzicielska"
#~ msgid "Unlocked"
#~ msgstr "Odblokowano"
#~ msgid "Update to"
#~ msgstr "Aktualizuj do"
#~ msgid "Updating"
#~ msgstr "Aktualizowanie"
#~ msgid "Updating Language Files..."
#~ msgstr "Aktualizacja plikow jezykowych..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Aktualizacja WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Popraw ekran panoramiczny"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Nie masz wlaczonej kontroli rodzicielskiej. Jesli chcesz jej uzywac, uruchom ja w ustawieniach Wii."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Moze nie ladowac sie poprawnie, jesli nie masz aktualnego menu systemowego"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-23 18:52+0200\n"
"Last-Translator: aniemotion\n"
"Language-Team: boto12, aniemotion\n"
@ -25,54 +25,15 @@ msgstr " foi salvo. O texto não foi verificado. Parte do código pode não func
msgid " is not on the server."
msgstr " não está no servidor."
msgid "0 (Everyone)"
msgstr "0 (Todos)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Crianças 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 hora"
msgid "10 min"
msgstr "10 minutos"
msgid "2 (Teen 12+)"
msgstr "2 (Adolescente 12+)"
msgid "20 min"
msgstr "20 minutos"
msgid "2D Cover Path"
msgstr "Pasta Capas 2D"
msgid "3 (Mature 16+)"
msgstr "3 (Adulto 16+)"
msgid "3 min"
msgstr "3 minutos"
msgid "30 min"
msgstr "30 minutos"
msgid "3D Cover Path"
msgstr "Pasta Capas 3D"
msgid "3D Covers"
msgstr "Capas 3D"
msgid "4 (Adults Only 18+)"
msgstr "4 (Adultos 18+)"
msgid "5 min"
msgstr "5 minutos"
msgid ">> Deleting tickets..."
msgstr ">> Eliminando tickets..."
@ -136,20 +97,14 @@ msgstr "As configurações estão desbloqueadas."
msgid "Alternate DOL"
msgstr "DOL alternativo"
msgid "An Error occured"
msgstr "Ocorreu um Erro"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Idioma"
msgid "Apr"
msgstr "Abr"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Tem certeza que você deseja ligar o Controle de Pais?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Autor:"
msgid "AutoInit Network"
msgstr "Auto-iniciar Rede"
msgid "AutoPatch"
msgstr "Patch automático"
msgid "BCA Codes Path"
msgstr "Caminho do BCA Codes"
@ -199,9 +151,6 @@ msgstr "Carregar/Standard"
msgid "Boot?"
msgstr "Carregar?"
msgid "Both"
msgstr "Ambos"
msgid "Can't be formatted"
msgstr "Não pode pode ser formatado"
@ -226,9 +175,6 @@ msgstr "Alterar Caminho para Play"
msgid "Cheatfile is blank"
msgstr "arquivo de truques vazio"
msgid "Checking for Updates"
msgstr "Procurando Atualizações"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "Configuração"
msgid "Console Default"
msgstr "Configurações padrões"
msgid "Console Locked"
msgstr "Configuração Bloqueada"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Não foi possível criar o arquivo GCT"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Créditos"
msgid "Custom Paths"
msgstr "Personalização de Pastas"
msgid "Customs/Original"
msgstr "Alternativas/Originais"
msgid "DOL Path"
msgstr "Pasta DOL"
@ -365,15 +309,9 @@ msgstr "Baixar Imagens Disco"
msgid "Disc Artwork Path"
msgstr "Pasta Imagens Disco"
msgid "Disc Default"
msgstr "Disco Padrão"
msgid "Disc Images"
msgstr "Imagens de Disco"
msgid "DiskFlip"
msgstr "Voltar Disco"
msgid "Display"
msgstr "Mostrar"
@ -404,6 +342,9 @@ msgstr "Deseja baixar este tema?"
msgid "Do you want to format:"
msgstr "Deseja FORMATAR:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Deseja usar o DOL alternativo que pensa ser o correcto?"
@ -434,26 +375,26 @@ msgstr "Download Terminado"
msgid "Download request failed."
msgstr "Download requerido falhou"
msgid "Downloading"
msgstr "Baixando"
msgid "Downloading Page List:"
msgstr "Baixando lista de paginas:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Baixando arquivo"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Baixando imagem:"
msgid "Dutch"
msgstr "Holandês"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "ERRO"
@ -464,9 +405,6 @@ msgstr "ERRO:"
msgid "ERROR: Can't set up theme."
msgstr "ERRO: Impossível aplicar tema"
msgid "English"
msgstr "Inglês"
msgid "Error"
msgstr "Erro"
@ -476,15 +414,24 @@ msgstr "Erro !"
msgid "Error 002 fix"
msgstr "Correção Erro 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Erro ao ler o Disco"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Erro na transferência de dados."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Falha ao extrair"
msgid "Failed to open partition"
msgstr "Falha ao abrir partição"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Fev"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Paginação Horizontal"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatar"
@ -545,15 +486,9 @@ msgstr "Formatando, por favor aguarde..."
msgid "Free Space"
msgstr "Espaço Livre"
msgid "French"
msgstr "Francês"
msgid "Full Shutdown"
msgstr "Desligar"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "Pasta Truques"
@ -566,9 +501,6 @@ msgstr "Definições de Interface"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg não encontrado em nenhuma subpasta"
msgid "Game ID"
msgstr "ID do Jogo"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Carregando Jogos"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Região"
msgid "Game Size"
msgstr "Tamanho do Jogo"
@ -599,18 +528,12 @@ msgstr "Este jogo já está instalado:"
msgid "Game partition"
msgstr "Partição de Game"
msgid "Gamename [GAMEID]"
msgstr "Nome do Jogo [GAMEID]"
msgid "Games"
msgstr "Jogos"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Alemão"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Insira um cartão SD para usar esta funcionalidade."
msgid "Install"
msgstr "Instalar"
msgid "Install 1:1 Copy"
msgstr "Instalar 1:1 Copy"
msgid "Install Error!"
msgstr "Erro de Instalação!"
@ -691,21 +611,12 @@ msgstr "Instalando título... Ok!"
msgid "Installing wad"
msgstr "Instalando wad"
msgid "Invalid PIN code"
msgstr "Código PIN inválido"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Parece que tem uma informação que pode ser útil. Por favor envie esta informação a nossa equipe de desenvolvimento."
msgid "Italian"
msgstr "Italiano"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japonês"
msgid "July"
msgstr "Jul"
@ -718,9 +629,6 @@ msgstr "Manter"
msgid "Keyboard"
msgstr "Teclado"
msgid "Korean"
msgstr "Coreano"
msgid "Language File"
msgstr "Idiomas"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Caminho para o arquivo de Idioma alterado."
msgid "Left"
msgstr "Esquerda"
msgid "Like SysMenu"
msgstr "Igual ao Menu do Wii"
msgid "Load"
msgstr "Carregar"
msgid "Load From SD/USB"
msgstr "Carregar do SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Carregar arquivo de: %s ?"
@ -752,6 +651,9 @@ msgstr "Carregar arquivo de: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Carregar este DOL como DOL alternativo?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Carregado idioma padrão."
@ -761,17 +663,8 @@ msgstr "Carregando música padrão."
msgid "Lock Console"
msgstr "Bloquear Configurações"
msgid "Locked"
msgstr "Bloqueado"
msgid "Loop Directory"
msgstr "Repitir Diretório"
msgid "Loop Music"
msgstr "Repitir Música"
msgid "Loop Sound"
msgstr "Repitir Som"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr ""
@ -794,15 +687,12 @@ msgstr "Modo Repetição de Música"
msgid "Music Volume"
msgstr "Volume da Música"
msgid "Neither"
msgstr "Nenhum"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Detectado Novo Disco"
msgid "Next"
msgstr "Próximo"
msgid "No"
msgstr "Não"
@ -839,12 +729,6 @@ msgstr "Não existem novas atualizações."
msgid "No themes found on the site."
msgstr "Nenhum tema encontrado no site"
msgid "None"
msgstr "Nenhum"
msgid "Normal"
msgstr ""
msgid "Not a WAD file."
msgstr "Não é um arquivo Wad"
@ -884,9 +768,6 @@ msgstr "Desligado"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Ligado"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Site Oficial:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Apenas Alternativas"
msgid "Only Original"
msgstr "Apenas Originais"
msgid "Only for Install"
msgstr "Apenas na instalação"
msgid "Original/Customs"
msgstr "Originais/Alternativas"
msgid "Parental Control"
msgstr "Controle de Pais"
msgid "Parental Control disabled"
msgstr "Controle dos Pais desligado"
msgid "Partition"
msgstr "Partição"
@ -947,9 +813,6 @@ msgstr "Vezes jogadas"
msgid "Play Next"
msgstr "Tocar Próximo"
msgid "Play Once"
msgstr "Tocar uma só vez"
msgid "Play Previous"
msgstr "Tocar Anteior"
@ -962,9 +825,6 @@ msgstr "Por favor aguarde..."
msgid "Power off the Wii"
msgstr "Desligar o Wii"
msgid "Prev"
msgstr "Anterior"
msgid "Prompts Buttons"
msgstr "Mensagens/Botões"
@ -974,9 +834,6 @@ msgstr "Publicado por"
msgid "Quick Boot"
msgstr "Inicialização Rápida"
msgid "Random Directory Music"
msgstr "Diretótio Aleatório de Músicas"
msgid "Reading WAD data... Ok!"
msgstr "Lendo dados do WAD... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Voltar ao Menu do Wii"
msgid "Right"
msgstr "Direita"
msgid "Rumble"
msgstr "Vibração"
msgid "SChinese"
msgstr "Chinês Simplificado"
msgid "SFX Volume"
msgstr "Volume dos Efeitos"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Selecionar um DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Set"
@ -1085,15 +933,6 @@ msgstr "Audio"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Som+Music de Fundo"
msgid "Sound+Quiet"
msgstr "Som+Quieto"
msgid "Spanish"
msgstr "Espanhol"
msgid "Special thanks to:"
msgstr "Agradecimentos especiais para:"
@ -1121,24 +960,18 @@ msgstr "Tema extraido com sucesso."
msgid "Successfully installed:"
msgstr "Instalado com Sucesso:"
msgid "System Default"
msgstr "Padrão do Sistema"
msgid "TChinese"
msgstr "Chinês Tradicional"
msgid "TXT Cheatcodes Path"
msgstr "Pasta Dicas"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "O diretorio não existe. Gostaria de cria-lo?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "O arquivo wad foi instalado mas não foi possível eliminá-lo do cartão SD."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "A instalação do wad falhou com o seguinte erro: %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Pasta de Temas Baixados"
@ -1152,6 +985,9 @@ msgstr "Pasta Temas"
msgid "Theme Title:"
msgstr "Titulo do Tema:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Falhou a transferencia"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "Dispositivo USB não encontrado"
msgid "USB Loader GX is protected"
msgstr "O USB Loader GX está bloqueado"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Não é possível abrir o arquivo wad baixado (%s)."
msgid "Uninstall"
msgstr "Desinstalar"
@ -1201,15 +1039,12 @@ msgstr "Desinstalando wad"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Desbloquear Controle de Pais"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Desbloquear configuração antes de usar esta opção."
msgid "Unlocked"
msgstr "Desbloqueado"
msgid "Unsupported format, try to extract manually."
msgstr "Formato não suportado, tente extrair manualmente."
@ -1234,21 +1069,12 @@ msgstr "Atualizar todos os arquivos de Idioma"
msgid "Update failed"
msgstr "Erro ao atualizar"
msgid "Update to"
msgstr "Atualizando para"
msgid "Updating"
msgstr "Atualizando"
msgid "Updating Language Files..."
msgstr "Atualizando arquivos de Idioma..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Atualizando arquivos de Idioma:"
msgid "Updating WiiTDB.zip"
msgstr "Atualizando WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Arquivo ZIP enviado y instalado no diretório homebrew."
@ -1280,9 +1106,6 @@ msgstr "O que deseja atualizar?"
msgid "WiFi Features"
msgstr "Rede sem fios"
msgid "Widescreen Fix"
msgstr "Correção 16:9"
msgid "Wii Menu"
msgstr "Menu do Wii"
@ -1310,9 +1133,6 @@ msgstr "Sim"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Você não tem o Controle de Pais ligado. Se você deseja usar o Controle de Pais, ligue-o nas Configurações do Wii."
msgid "You need to select or format a partition"
msgstr "Você precisa selecionar ou formatar uma partição"
@ -1377,6 +1197,216 @@ msgstr "de"
msgid "seconds left"
msgstr "segundos restantes"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Instalar 1:1 Copy"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Todos)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Crianças 7+)"
#~ msgid "1 hour"
#~ msgstr "1 hora"
#~ msgid "10 min"
#~ msgstr "10 minutos"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Adolescente 12+)"
#~ msgid "20 min"
#~ msgstr "20 minutos"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Adulto 16+)"
#~ msgid "3 min"
#~ msgstr "3 minutos"
#~ msgid "30 min"
#~ msgstr "30 minutos"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Adultos 18+)"
#~ msgid "5 min"
#~ msgstr "5 minutos"
#~ msgid "An Error occured"
#~ msgstr "Ocorreu um Erro"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Tem certeza que você deseja ligar o Controle de Pais?"
#~ msgid "AutoPatch"
#~ msgstr "Patch automático"
#~ msgid "Both"
#~ msgstr "Ambos"
#~ msgid "Checking for Updates"
#~ msgstr "Procurando Atualizações"
#~ msgid "Console Default"
#~ msgstr "Configurações padrões"
#~ msgid "Customs/Original"
#~ msgstr "Alternativas/Originais"
#~ msgid "Disc Default"
#~ msgstr "Disco Padrão"
#~ msgid "DiskFlip"
#~ msgstr "Voltar Disco"
#~ msgid "Downloading"
#~ msgstr "Baixando"
#~ msgid "Dutch"
#~ msgstr "Holandês"
#~ msgid "English"
#~ msgstr "Inglês"
#~ msgid "French"
#~ msgstr "Francês"
#~ msgid "Game ID"
#~ msgstr "ID do Jogo"
#~ msgid "Game Region"
#~ msgstr "Região"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "Nome do Jogo [GAMEID]"
#~ msgid "German"
#~ msgstr "Alemão"
#~ msgid "Invalid PIN code"
#~ msgstr "Código PIN inválido"
#~ msgid "Italian"
#~ msgstr "Italiano"
#~ msgid "Japanese"
#~ msgstr "Japonês"
#~ msgid "Korean"
#~ msgstr "Coreano"
#~ msgid "Left"
#~ msgstr "Esquerda"
#~ msgid "Like SysMenu"
#~ msgstr "Igual ao Menu do Wii"
#~ msgid "Load From SD/USB"
#~ msgstr "Carregar do SD/USB"
#~ msgid "Locked"
#~ msgstr "Bloqueado"
#~ msgid "Loop Directory"
#~ msgstr "Repitir Diretório"
#~ msgid "Loop Music"
#~ msgstr "Repitir Música"
#~ msgid "Loop Sound"
#~ msgstr "Repitir Som"
#~ msgid "Neither"
#~ msgstr "Nenhum"
#~ msgid "Next"
#~ msgstr "Próximo"
#~ msgid "None"
#~ msgstr "Nenhum"
#~ msgid "ON"
#~ msgstr "Ligado"
#~ msgid "Only Customs"
#~ msgstr "Apenas Alternativas"
#~ msgid "Only Original"
#~ msgstr "Apenas Originais"
#~ msgid "Only for Install"
#~ msgstr "Apenas na instalação"
#~ msgid "Original/Customs"
#~ msgstr "Originais/Alternativas"
#~ msgid "Parental Control disabled"
#~ msgstr "Controle dos Pais desligado"
#~ msgid "Play Once"
#~ msgstr "Tocar uma só vez"
#~ msgid "Prev"
#~ msgstr "Anterior"
#~ msgid "Random Directory Music"
#~ msgstr "Diretótio Aleatório de Músicas"
#~ msgid "Right"
#~ msgstr "Direita"
#~ msgid "SChinese"
#~ msgstr "Chinês Simplificado"
#~ msgid "Sound+BGM"
#~ msgstr "Som+Music de Fundo"
#~ msgid "Sound+Quiet"
#~ msgstr "Som+Quieto"
#~ msgid "Spanish"
#~ msgstr "Espanhol"
#~ msgid "System Default"
#~ msgstr "Padrão do Sistema"
#~ msgid "TChinese"
#~ msgstr "Chinês Tradicional"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "O arquivo wad foi instalado mas não foi possível eliminá-lo do cartão SD."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "A instalação do wad falhou com o seguinte erro: %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Não é possível abrir o arquivo wad baixado (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Desbloquear Controle de Pais"
#~ msgid "Unlocked"
#~ msgstr "Desbloqueado"
#~ msgid "Update to"
#~ msgstr "Atualizando para"
#~ msgid "Updating"
#~ msgstr "Atualizando"
#~ msgid "Updating Language Files..."
#~ msgstr "Atualizando arquivos de Idioma..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Atualizando WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Correção 16:9"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Você não tem o Controle de Pais ligado. Se você deseja usar o Controle de Pais, ligue-o nas Configurações do Wii."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Pode não carregar corretamente se seu sistema não estiver atualizado."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2010-03-22 10:55-0000\n"
"Last-Translator: Sky8000\n"
"Language-Team: Sky8000 <sky8000@hotmail.com>\n"
@ -25,54 +25,15 @@ msgstr " foi guardado. O texto não foi verificado. Parte do código pode não f
msgid " is not on the server."
msgstr " não está no servidor."
msgid "0 (Everyone)"
msgstr "0 (Todos)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Crianças 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 hora"
msgid "10 min"
msgstr "10 minutos"
msgid "2 (Teen 12+)"
msgstr "2 (Adolescente 12+)"
msgid "20 min"
msgstr "20 minutos"
msgid "2D Cover Path"
msgstr "Pasta Capas 2D"
msgid "3 (Mature 16+)"
msgstr "3 (Adulto 16+)"
msgid "3 min"
msgstr "3 minutos"
msgid "30 min"
msgstr "30 minutos"
msgid "3D Cover Path"
msgstr "Pasta Capas 3D"
msgid "3D Covers"
msgstr "Capas 3D"
msgid "4 (Adults Only 18+)"
msgstr "4 (Adultos 18+)"
msgid "5 min"
msgstr "5 minutos"
msgid ">> Deleting tickets..."
msgstr ">> Eliminando tickets..."
@ -136,20 +97,14 @@ msgstr "As configurações estão desbloqueadas."
msgid "Alternate DOL"
msgstr "DOL alternativo"
msgid "An Error occured"
msgstr "Ocurreu um Erro"
msgid "Anti"
msgstr "Anti"
msgid "App Language"
msgstr "Idioma"
msgid "Apr"
msgstr "Abr"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Tem a certeza que pretende activar o Controlo Parental?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Autor:"
msgid "AutoInit Network"
msgstr "Auto-iniciar Rede"
msgid "AutoPatch"
msgstr "Patch automático"
msgid "BCA Codes Path"
msgstr "Pasta Códigos BCA"
@ -199,9 +151,6 @@ msgstr "Arranque/Standard"
msgid "Boot?"
msgstr "Carregar?"
msgid "Both"
msgstr "Ambos"
msgid "Can't be formatted"
msgstr "Não pode ser formatado"
@ -226,9 +175,6 @@ msgstr "Alterar Pasta de Músicas"
msgid "Cheatfile is blank"
msgstr "Ficheiro de truques vazio"
msgid "Checking for Updates"
msgstr "Procurando Actualizações"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Ligação perdida..."
msgid "Console"
msgstr "Configuração"
msgid "Console Default"
msgstr "Predefinição Consola"
msgid "Console Locked"
msgstr "Configuração Bloqueada"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Não foi possível criar o ficheiro GCT"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Créditos"
msgid "Custom Paths"
msgstr "Personalização de Pastas"
msgid "Customs/Original"
msgstr "Alternativas/Originais"
msgid "DOL Path"
msgstr "Pasta DOL"
@ -365,15 +309,9 @@ msgstr "Descaregar Imagens Disco"
msgid "Disc Artwork Path"
msgstr "Pasta Imagens Disco"
msgid "Disc Default"
msgstr "Predefinição Disco"
msgid "Disc Images"
msgstr "Imagens de Disco"
msgid "DiskFlip"
msgstr "Voltar Disco"
msgid "Display"
msgstr "Mostrar"
@ -404,6 +342,9 @@ msgstr "Deseja descarregar este tema?"
msgid "Do you want to format:"
msgstr "Deseja FORMATAR:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Pretende usar o DOL alternativo que se pensa ser o correcto?"
@ -434,26 +375,26 @@ msgstr "Download Terminado"
msgid "Download request failed."
msgstr "O pedido de download falhou."
msgid "Downloading"
msgstr "Descarregando"
msgid "Downloading Page List:"
msgstr "Descarregando Lista de Páginas:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Descarregando ficheiro:"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Descarregando imagem:"
msgid "Dutch"
msgstr "Holandês"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "ERRO"
@ -464,9 +405,6 @@ msgstr "ERRO:"
msgid "ERROR: Can't set up theme."
msgstr "ERRO: Impossível configurar tema."
msgid "English"
msgstr "Inglês"
msgid "Error"
msgstr "Erro"
@ -476,15 +414,24 @@ msgstr "Erro !"
msgid "Error 002 fix"
msgstr "Correcção Erro 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Erro ao ler o Disco"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Erro na transferência de dados."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Falha ao extrair ficheiros."
msgid "Failed to open partition"
msgstr "Falha ao abrir partição"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Fev"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Paginação Horizontal"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatar"
@ -545,15 +486,9 @@ msgstr "Formatando, por favor aguarde..."
msgid "Free Space"
msgstr "Espaço Livre"
msgid "French"
msgstr "Francês"
msgid "Full Shutdown"
msgstr "Desligar"
msgid "GAMEID_Gamename"
msgstr "IDJOGO_NomeJogo"
msgid "GCT Cheatcodes Path"
msgstr "Pasta ficheiros GCT"
@ -566,9 +501,6 @@ msgstr "Definições do Interface"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg não encontrado em nenhuma sub-pasta."
msgid "Game ID"
msgstr "ID do Jogo"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Carregamento de Jogos"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Região"
msgid "Game Size"
msgstr "Tamanho do Jogo"
@ -599,18 +528,12 @@ msgstr "O jogo já está instalado:"
msgid "Game partition"
msgstr "Partição de Jogos"
msgid "Gamename [GAMEID]"
msgstr "NomeJogo [IDJOGO]"
msgid "Games"
msgstr "Jogos"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Alemão"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Insira um cartão SD para usar esta funcionalidade."
msgid "Install"
msgstr "Instalar"
msgid "Install 1:1 Copy"
msgstr "Instalar Cópia 1:1"
msgid "Install Error!"
msgstr "Erro de Instalação!"
@ -691,21 +611,12 @@ msgstr "Instalando título... Ok!"
msgid "Installing wad"
msgstr "Instalando wad"
msgid "Invalid PIN code"
msgstr "PIN inválido"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Parece que tem informação que pode ser útil. Por favor envie esta informação à equipa de desenvolvimento."
msgid "Italian"
msgstr "Italiano"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japonês"
msgid "July"
msgstr "Jul"
@ -718,9 +629,6 @@ msgstr "Manter"
msgid "Keyboard"
msgstr "Teclado"
msgid "Korean"
msgstr "Coreano"
msgid "Language File"
msgstr "Idiomas"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Pasta para o ficheiro de Idioma alterada."
msgid "Left"
msgstr "Esquerda"
msgid "Like SysMenu"
msgstr "Igual ao Menu da Wii"
msgid "Load"
msgstr "Carregar"
msgid "Load From SD/USB"
msgstr "Carregar do SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Carregar ficheiro de: %s ?"
@ -752,6 +651,9 @@ msgstr "Carregar ficheiro de: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Carregar este DOL como DOL alternativo?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Carregado idioma padrão."
@ -761,17 +663,8 @@ msgstr "Carregando música padrão."
msgid "Lock Console"
msgstr "Bloquear Configurações"
msgid "Locked"
msgstr "Bloqueado"
msgid "Loop Directory"
msgstr "Repetir Pasta"
msgid "Loop Music"
msgstr "Repetir Música"
msgid "Loop Sound"
msgstr "Repetir Sons"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr ""
@ -794,15 +687,12 @@ msgstr "Modo de Repetição"
msgid "Music Volume"
msgstr "Volume Música"
msgid "Neither"
msgstr "Nenhum"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Novo Disco Detectado"
msgid "Next"
msgstr "Próximo"
msgid "No"
msgstr "Não"
@ -839,12 +729,6 @@ msgstr "Não existem novas actualizações."
msgid "No themes found on the site."
msgstr "Nenhum tema encontrado no site."
msgid "None"
msgstr "Nenhum"
msgid "Normal"
msgstr "Normal"
msgid "Not a WAD file."
msgstr "Não é um ficheiro WAD."
@ -884,9 +768,6 @@ msgstr "Desligado"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "Ligado"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Site Oficial:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Apenas Alternativas"
msgid "Only Original"
msgstr "Apenas Originais"
msgid "Only for Install"
msgstr "Apenas na instalação"
msgid "Original/Customs"
msgstr "Originais/Alternativas"
msgid "Parental Control"
msgstr "Controlo Parental"
msgid "Parental Control disabled"
msgstr "Controlo Parental inactivo"
msgid "Partition"
msgstr "Partição"
@ -947,9 +813,6 @@ msgstr "Vezes jogadas"
msgid "Play Next"
msgstr "Próxima"
msgid "Play Once"
msgstr "Tocar uma vez"
msgid "Play Previous"
msgstr "Anterior"
@ -962,9 +825,6 @@ msgstr "Por favor aguarde..."
msgid "Power off the Wii"
msgstr "Desligar a Wii"
msgid "Prev"
msgstr "Anterior"
msgid "Prompts Buttons"
msgstr "Mensagens/Botões"
@ -974,9 +834,6 @@ msgstr "Publicado por"
msgid "Quick Boot"
msgstr "Arranque Rápido"
msgid "Random Directory Music"
msgstr "Pasta de Música Aleatória"
msgid "Reading WAD data... Ok!"
msgstr "Lendo dados do WAD... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Voltar ao Menu da Wii"
msgid "Right"
msgstr "Direita"
msgid "Rumble"
msgstr "Vibração"
msgid "SChinese"
msgstr "Chinês Simplificado"
msgid "SFX Volume"
msgstr "Volume Efeitos"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Seleccionar o DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Set"
@ -1085,15 +933,6 @@ msgstr "Audio"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Efeitos+Musica"
msgid "Sound+Quiet"
msgstr "Efeitos+Silêncio"
msgid "Spanish"
msgstr "Espanhol"
msgid "Special thanks to:"
msgstr "Agradecimentos especiais para:"
@ -1121,24 +960,18 @@ msgstr "Tema extraído com sucesso."
msgid "Successfully installed:"
msgstr "Instalado com Sucesso:"
msgid "System Default"
msgstr "Predefinição Sistema"
msgid "TChinese"
msgstr "Chinês Tradicional"
msgid "TXT Cheatcodes Path"
msgstr "Pasta Dicas"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "A pasta não existe, pretende criá-la?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "O ficheiro wad foi instalado mas não foi possível eliminá-lo do cartão SD."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "A instalação do wad falhou com o seguinte erro: %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Pasta Download Temas"
@ -1152,6 +985,9 @@ msgstr "Pasta Temas"
msgid "Theme Title:"
msgstr "Título do Tema:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "A transferência falhou."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "Dispositivo USB não encontrado"
msgid "USB Loader GX is protected"
msgstr "O USB Loader GX está bloqueado"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Não é possível abrir o ficheiro wad descarregado (%s)."
msgid "Uninstall"
msgstr "Desinstalar"
@ -1201,15 +1039,12 @@ msgstr "Desinstalando wad"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Desbloquear Controlo Parental"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Desbloquear configuração antes de usar esta opção."
msgid "Unlocked"
msgstr "Desbloqueado"
msgid "Unsupported format, try to extract manually."
msgstr "Formato não suportado, tente extrair manualmente."
@ -1234,21 +1069,12 @@ msgstr "Actualizar todos os ficheiros de Idioma"
msgid "Update failed"
msgstr "Erro ao actualizar"
msgid "Update to"
msgstr "Actualizando para"
msgid "Updating"
msgstr "Actualizando"
msgid "Updating Language Files..."
msgstr "Actualizando ficheiros de Idioma..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Actualizando ficheiros de Idioma:"
msgid "Updating WiiTDB.zip"
msgstr "Actualizando WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Ficheiro ZIP instalado na pasta do Homebrew."
@ -1280,9 +1106,6 @@ msgstr "Que componente deseja actualizar?"
msgid "WiFi Features"
msgstr "Rede sem fios"
msgid "Widescreen Fix"
msgstr "Correcção 16:9"
msgid "Wii Menu"
msgstr "Menu da Wii"
@ -1310,9 +1133,6 @@ msgstr "Sim"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "O Controlo Parental não está activo. Se deseja utilizar o Controlo Parental active-o na configuração da Wii (Wii Settings)."
msgid "You need to select or format a partition"
msgstr "Necessita seleccionar ou formatar uma partição"
@ -1377,6 +1197,225 @@ msgstr "de"
msgid "seconds left"
msgstr "segundos restantes"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Instalar Cópia 1:1"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Todos)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Crianças 7+)"
#~ msgid "1 hour"
#~ msgstr "1 hora"
#~ msgid "10 min"
#~ msgstr "10 minutos"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Adolescente 12+)"
#~ msgid "20 min"
#~ msgstr "20 minutos"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Adulto 16+)"
#~ msgid "3 min"
#~ msgstr "3 minutos"
#~ msgid "30 min"
#~ msgstr "30 minutos"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Adultos 18+)"
#~ msgid "5 min"
#~ msgstr "5 minutos"
#~ msgid "An Error occured"
#~ msgstr "Ocurreu um Erro"
#~ msgid "Anti"
#~ msgstr "Anti"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Tem a certeza que pretende activar o Controlo Parental?"
#~ msgid "AutoPatch"
#~ msgstr "Patch automático"
#~ msgid "Both"
#~ msgstr "Ambos"
#~ msgid "Checking for Updates"
#~ msgstr "Procurando Actualizações"
#~ msgid "Console Default"
#~ msgstr "Predefinição Consola"
#~ msgid "Customs/Original"
#~ msgstr "Alternativas/Originais"
#~ msgid "Disc Default"
#~ msgstr "Predefinição Disco"
#~ msgid "DiskFlip"
#~ msgstr "Voltar Disco"
#~ msgid "Downloading"
#~ msgstr "Descarregando"
#~ msgid "Dutch"
#~ msgstr "Holandês"
#~ msgid "English"
#~ msgstr "Inglês"
#~ msgid "French"
#~ msgstr "Francês"
#~ msgid "GAMEID_Gamename"
#~ msgstr "IDJOGO_NomeJogo"
#~ msgid "Game ID"
#~ msgstr "ID do Jogo"
#~ msgid "Game Region"
#~ msgstr "Região"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "NomeJogo [IDJOGO]"
#~ msgid "German"
#~ msgstr "Alemão"
#~ msgid "Invalid PIN code"
#~ msgstr "PIN inválido"
#~ msgid "Italian"
#~ msgstr "Italiano"
#~ msgid "Japanese"
#~ msgstr "Japonês"
#~ msgid "Korean"
#~ msgstr "Coreano"
#~ msgid "Left"
#~ msgstr "Esquerda"
#~ msgid "Like SysMenu"
#~ msgstr "Igual ao Menu da Wii"
#~ msgid "Load From SD/USB"
#~ msgstr "Carregar do SD/USB"
#~ msgid "Locked"
#~ msgstr "Bloqueado"
#~ msgid "Loop Directory"
#~ msgstr "Repetir Pasta"
#~ msgid "Loop Music"
#~ msgstr "Repetir Música"
#~ msgid "Loop Sound"
#~ msgstr "Repetir Sons"
#~ msgid "Neither"
#~ msgstr "Nenhum"
#~ msgid "Next"
#~ msgstr "Próximo"
#~ msgid "None"
#~ msgstr "Nenhum"
#~ msgid "Normal"
#~ msgstr "Normal"
#~ msgid "ON"
#~ msgstr "Ligado"
#~ msgid "Only Customs"
#~ msgstr "Apenas Alternativas"
#~ msgid "Only Original"
#~ msgstr "Apenas Originais"
#~ msgid "Only for Install"
#~ msgstr "Apenas na instalação"
#~ msgid "Original/Customs"
#~ msgstr "Originais/Alternativas"
#~ msgid "Parental Control disabled"
#~ msgstr "Controlo Parental inactivo"
#~ msgid "Play Once"
#~ msgstr "Tocar uma vez"
#~ msgid "Prev"
#~ msgstr "Anterior"
#~ msgid "Random Directory Music"
#~ msgstr "Pasta de Música Aleatória"
#~ msgid "Right"
#~ msgstr "Direita"
#~ msgid "SChinese"
#~ msgstr "Chinês Simplificado"
#~ msgid "Sound+BGM"
#~ msgstr "Efeitos+Musica"
#~ msgid "Sound+Quiet"
#~ msgstr "Efeitos+Silêncio"
#~ msgid "Spanish"
#~ msgstr "Espanhol"
#~ msgid "System Default"
#~ msgstr "Predefinição Sistema"
#~ msgid "TChinese"
#~ msgstr "Chinês Tradicional"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "O ficheiro wad foi instalado mas não foi possível eliminá-lo do cartão SD."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "A instalação do wad falhou com o seguinte erro: %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Não é possível abrir o ficheiro wad descarregado (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Desbloquear Controlo Parental"
#~ msgid "Unlocked"
#~ msgstr "Desbloqueado"
#~ msgid "Update to"
#~ msgstr "Actualizando para"
#~ msgid "Updating"
#~ msgstr "Actualizando"
#~ msgid "Updating Language Files..."
#~ msgstr "Actualizando ficheiros de Idioma..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Actualizando WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Correcção 16:9"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "O Controlo Parental não está activo. Se deseja utilizar o Controlo Parental active-o na configuração da Wii (Wii Settings)."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Pode não carregar correctamente se o System Menu estiver desactualizado."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: nikolai_ca\n"
"Language-Team: Kir, alendit, nikolai_ca\n"
@ -25,54 +25,15 @@ msgstr " был сохранен. Текст не был проверен. Не
msgid " is not on the server."
msgstr " не найден на сервере"
msgid "0 (Everyone)"
msgstr "0 (Для всех)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Дети 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 час"
msgid "10 min"
msgstr "10 мин."
msgid "2 (Teen 12+)"
msgstr "2 (Подростки 12+)"
msgid "20 min"
msgstr "20 мин."
msgid "2D Cover Path"
msgstr "Путь к 2D обложкам"
msgid "3 (Mature 16+)"
msgstr "3 (Подростки 16+)"
msgid "3 min"
msgstr "3 мин."
msgid "30 min"
msgstr "30 мин."
msgid "3D Cover Path"
msgstr "Путь к 3D обложкам"
msgid "3D Covers"
msgstr "3D Обложки"
msgid "4 (Adults Only 18+)"
msgstr "4 (Взрослые 18+)"
msgid "5 min"
msgstr "5 мин."
msgid ">> Deleting tickets..."
msgstr ">> Удаление тикетов...."
@ -136,20 +97,14 @@ msgstr "Все функции USB Loader GX разблокированы."
msgid "Alternate DOL"
msgstr "Альтернативный DOL"
msgid "An Error occured"
msgstr "Произошла ошибка"
msgid "Anti"
msgstr "Анти"
msgid "App Language"
msgstr "Язык приложения"
msgid "Apr"
msgstr "Апр"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Вы действительно хотите включить Родительский Контроль?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Автор:"
msgid "AutoInit Network"
msgstr "АвтоИнициализация Сети"
msgid "AutoPatch"
msgstr "Авто Патч"
msgid "BCA Codes Path"
msgstr "Путь к кодам BCA"
@ -199,9 +151,6 @@ msgstr "Загрузка/Стандарт"
msgid "Boot?"
msgstr "Загрузить?"
msgid "Both"
msgstr "Оба"
msgid "Can't be formatted"
msgstr "Невозможно отформатировать"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "Файл с читами пустой"
msgid "Checking for Updates"
msgstr "Проверяю обновления"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Связь потеряна..."
msgid "Console"
msgstr "Консоль"
msgid "Console Default"
msgstr "По умолчанию (консоль)"
msgid "Console Locked"
msgstr "Консоль заблокирована"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Не могу создать GCT файл"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Об авторах"
msgid "Custom Paths"
msgstr "Изменение путей"
msgid "Customs/Original"
msgstr "Измененный/Оригинальные"
msgid "DOL Path"
msgstr "Путь к DOL"
@ -365,15 +309,9 @@ msgstr "Загрузка изображений диска"
msgid "Disc Artwork Path"
msgstr "Путь к изображениям дисков"
msgid "Disc Default"
msgstr "По умолчанию (диск)"
msgid "Disc Images"
msgstr "Изображения дисков"
msgid "DiskFlip"
msgstr "ДискФлип"
msgid "Display"
msgstr "Отображать"
@ -404,6 +342,9 @@ msgstr "Вы действительно хотите загрузить эту
msgid "Do you want to format:"
msgstr "Вы хотите отформатировать:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Вы хотите использовать DOL, который считается правильным?"
@ -434,26 +375,26 @@ msgstr "Скачивание завершено"
msgid "Download request failed."
msgstr "Запрос на загрузку завершился с ошибкоа."
msgid "Downloading"
msgstr "Скачиваю"
msgid "Downloading Page List:"
msgstr "Загружается список страниц:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Скачиваю файл:"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Загружается картинка:"
msgid "Dutch"
msgstr "Голландский"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "ОШИБКА"
@ -464,9 +405,6 @@ msgstr "ОШИБКА:"
msgid "ERROR: Can't set up theme."
msgstr "ОШИБКА: Не удалось установить тему."
msgid "English"
msgstr "Английский"
msgid "Error"
msgstr "Ошибка"
@ -476,15 +414,24 @@ msgstr "Ошибка !"
msgid "Error 002 fix"
msgstr "Фикс ошибки 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Ошибка чтения диска"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Ошибка при передаче данных."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Не удалось распаковать."
msgid "Failed to open partition"
msgstr "Не удалось открыть раздел"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Фев"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Flip-X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Форматировать"
@ -545,15 +486,9 @@ msgstr "Форматирую, пожалуйста подождите..."
msgid "Free Space"
msgstr "Свободное пространство"
msgid "French"
msgstr "Французский"
msgid "Full Shutdown"
msgstr "Полное отключение"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "Путь к читам"
@ -566,9 +501,6 @@ msgstr "Настройки интерфейса"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg не найден ни в одном каталоге."
msgid "Game ID"
msgstr "ID игры"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "загрузка игры"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Регион игры"
msgid "Game Size"
msgstr "Размер игры"
@ -599,18 +528,12 @@ msgstr "Игра уже установлена:"
msgid "Game partition"
msgstr "Раздел игры"
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Игры"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Немецкий"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Для использования этой функции нужна SD
msgid "Install"
msgstr "Установка"
msgid "Install 1:1 Copy"
msgstr "Установка копии 1:1"
msgid "Install Error!"
msgstr "Ошибка установки!"
@ -691,21 +611,12 @@ msgstr "Установка тайтла... ОК!"
msgid "Installing wad"
msgstr "Установка WAD"
msgid "Invalid PIN code"
msgstr "Неправильный PIN-код"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Возможно что у Вас есть информация полезная нам. Пожалуйста передайте эту информацию команде разработчиков."
msgid "Italian"
msgstr "Итальянский"
msgid "Jan"
msgstr "Янв"
msgid "Japanese"
msgstr "Японский"
msgid "July"
msgstr "Июл"
@ -718,9 +629,6 @@ msgstr "Сохранить"
msgid "Keyboard"
msgstr "Клавиатура"
msgid "Korean"
msgstr "Корейский"
msgid "Language File"
msgstr "Языковой файл"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Путь к языкам изменен"
msgid "Left"
msgstr "Налево"
msgid "Like SysMenu"
msgstr "как SysMenu"
msgid "Load"
msgstr "Загрузить"
msgid "Load From SD/USB"
msgstr "Загрузка с SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Загрузить файл из %s ?"
@ -752,6 +651,9 @@ msgstr "Загрузить файл из %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "Загрузить этот DOL в качестве альтернативного ?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Загрузка языка по умолчанию"
@ -761,18 +663,9 @@ msgstr "Загрузка стандартной музыки"
msgid "Lock Console"
msgstr "Заблокировать консоль"
msgid "Locked"
msgstr "Заблокировано"
msgid "Loop Directory"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgstr "Зациклить звут"
msgid "Mar"
msgstr "Мар"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Громкость"
msgid "Neither"
msgstr "Ни то, ни другое"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Обнаружен новый диск"
msgid "Next"
msgstr "Следующий"
msgid "No"
msgstr "Нет"
@ -839,12 +729,6 @@ msgstr "Нет обновлений"
msgid "No themes found on the site."
msgstr "На сайте не найдено ни одной темы"
msgid "None"
msgstr ""
msgid "Normal"
msgstr "Обычный"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "ВЫКЛ"
msgid "OK"
msgstr "OK"
msgid "ON"
msgstr "ВКЛ"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Оф. сайт:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Только измененные"
msgid "Only Original"
msgstr "Только оригинальные"
msgid "Only for Install"
msgstr "Только при установке"
msgid "Original/Customs"
msgstr "Измененные/Модифицированные"
msgid "Parental Control"
msgstr "Родительский Контроль"
msgid "Parental Control disabled"
msgstr "Родительский Контроль выключен"
msgid "Partition"
msgstr "Раздел"
@ -947,9 +813,6 @@ msgstr "Запущено раз"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "Пожалуйста подождите..."
msgid "Power off the Wii"
msgstr "Выключить Wii"
msgid "Prev"
msgstr "Предыдущий"
msgid "Prompts Buttons"
msgstr "Кнопки приглашения"
@ -974,9 +834,6 @@ msgstr "Опубликовано: "
msgid "Quick Boot"
msgstr "Быстрая загрузка"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "Чтение данных WAD... ОК!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Вернуться в меню Wii"
msgid "Right"
msgstr "Направо"
msgid "Rumble"
msgstr "Вибрация"
msgid "SChinese"
msgstr "Упрощенный китайский"
msgid "SFX Volume"
msgstr "Громкость эффектов"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Выберите DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Сен"
@ -1085,15 +933,6 @@ msgstr "Звук"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Звук и фоновая музыка"
msgid "Sound+Quiet"
msgstr "Звук и тишина"
msgid "Spanish"
msgstr "Испанский"
msgid "Special thanks to:"
msgstr "Отдельные благодарности"
@ -1121,24 +960,18 @@ msgstr "Успешно извлечена тема."
msgid "Successfully installed:"
msgstr "Успешно установлено:"
msgid "System Default"
msgstr "По умолчанию"
msgid "TChinese"
msgstr "Традиционный китайский"
msgid "TXT Cheatcodes Path"
msgstr "Путь к TXT читкодам"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Заданный каталог не существует. Хотите создать его?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WAD файл установлен, но он не может быть удален с карты SD."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "Установка WAD не удалась, код ошибки %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Путь для загрузки темы"
@ -1152,6 +985,9 @@ msgstr "Путь к темам"
msgid "Theme Title:"
msgstr "Заголовок темы:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Передача не удалась."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB устройство не найдено"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX заблокирован"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Не могу открыть скачанный WAD (%s)"
msgid "Uninstall"
msgstr "Деинсталлировать"
@ -1201,15 +1039,12 @@ msgstr "Деинсталлируется wad"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Разблокировать Родительский Контроль"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Для изменения параметра разблокируйте консоль."
msgid "Unlocked"
msgstr "Разблокировано"
msgid "Unsupported format, try to extract manually."
msgstr "Формат не поддерживается, попробуйте распаковать самостоятельно."
@ -1234,21 +1069,12 @@ msgstr "Обновить все языковые файлы"
msgid "Update failed"
msgstr "Обновление не удалось"
msgid "Update to"
msgstr "Обновить до"
msgid "Updating"
msgstr "обновляю"
msgid "Updating Language Files..."
msgstr "Обновление языковых файлов..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Обновление языковых файлов:"
msgid "Updating WiiTDB.zip"
msgstr "Обновление WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Загруженный ZIP-файл установлен в каталог homebrew"
@ -1280,9 +1106,6 @@ msgstr "Что Вы хотите обновить?"
msgid "WiFi Features"
msgstr "свойства WiFi"
msgid "Widescreen Fix"
msgstr "Широкоформатный фикс"
msgid "Wii Menu"
msgstr "Меню Wii"
@ -1310,9 +1133,6 @@ msgstr "Да"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "У Вас не включен Родительский Контроль. Если вы хотите использовать Родительский Контроль, включите его в установках Wii."
msgid "You need to select or format a partition"
msgstr ""
@ -1377,6 +1197,204 @@ msgstr "из"
msgid "seconds left"
msgstr "секунд осталось"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Установка копии 1:1"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Для всех)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Дети 7+)"
#~ msgid "1 hour"
#~ msgstr "1 час"
#~ msgid "10 min"
#~ msgstr "10 мин."
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Подростки 12+)"
#~ msgid "20 min"
#~ msgstr "20 мин."
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Подростки 16+)"
#~ msgid "3 min"
#~ msgstr "3 мин."
#~ msgid "30 min"
#~ msgstr "30 мин."
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Взрослые 18+)"
#~ msgid "5 min"
#~ msgstr "5 мин."
#~ msgid "An Error occured"
#~ msgstr "Произошла ошибка"
#~ msgid "Anti"
#~ msgstr "Анти"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Вы действительно хотите включить Родительский Контроль?"
#~ msgid "AutoPatch"
#~ msgstr "Авто Патч"
#~ msgid "Both"
#~ msgstr "Оба"
#~ msgid "Checking for Updates"
#~ msgstr "Проверяю обновления"
#~ msgid "Console Default"
#~ msgstr "По умолчанию (консоль)"
#~ msgid "Customs/Original"
#~ msgstr "Измененный/Оригинальные"
#~ msgid "Disc Default"
#~ msgstr "По умолчанию (диск)"
#~ msgid "DiskFlip"
#~ msgstr "ДискФлип"
#~ msgid "Downloading"
#~ msgstr "Скачиваю"
#~ msgid "Dutch"
#~ msgstr "Голландский"
#~ msgid "English"
#~ msgstr "Английский"
#~ msgid "French"
#~ msgstr "Французский"
#~ msgid "Game ID"
#~ msgstr "ID игры"
#~ msgid "Game Region"
#~ msgstr "Регион игры"
#~ msgid "German"
#~ msgstr "Немецкий"
#~ msgid "Invalid PIN code"
#~ msgstr "Неправильный PIN-код"
#~ msgid "Italian"
#~ msgstr "Итальянский"
#~ msgid "Japanese"
#~ msgstr "Японский"
#~ msgid "Korean"
#~ msgstr "Корейский"
#~ msgid "Left"
#~ msgstr "Налево"
#~ msgid "Like SysMenu"
#~ msgstr "как SysMenu"
#~ msgid "Load From SD/USB"
#~ msgstr "Загрузка с SD/USB"
#~ msgid "Locked"
#~ msgstr "Заблокировано"
#~ msgid "Loop Sound"
#~ msgstr "Зациклить звут"
#~ msgid "Neither"
#~ msgstr "Ни то, ни другое"
#~ msgid "Next"
#~ msgstr "Следующий"
#~ msgid "Normal"
#~ msgstr "Обычный"
#~ msgid "ON"
#~ msgstr "ВКЛ"
#~ msgid "Only Customs"
#~ msgstr "Только измененные"
#~ msgid "Only Original"
#~ msgstr "Только оригинальные"
#~ msgid "Only for Install"
#~ msgstr "Только при установке"
#~ msgid "Original/Customs"
#~ msgstr "Измененные/Модифицированные"
#~ msgid "Parental Control disabled"
#~ msgstr "Родительский Контроль выключен"
#~ msgid "Prev"
#~ msgstr "Предыдущий"
#~ msgid "Right"
#~ msgstr "Направо"
#~ msgid "SChinese"
#~ msgstr "Упрощенный китайский"
#~ msgid "Sound+BGM"
#~ msgstr "Звук и фоновая музыка"
#~ msgid "Sound+Quiet"
#~ msgstr "Звук и тишина"
#~ msgid "Spanish"
#~ msgstr "Испанский"
#~ msgid "System Default"
#~ msgstr "По умолчанию"
#~ msgid "TChinese"
#~ msgstr "Традиционный китайский"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WAD файл установлен, но он не может быть удален с карты SD."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "Установка WAD не удалась, код ошибки %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Не могу открыть скачанный WAD (%s)"
#~ msgid "Unlock Parental Control"
#~ msgstr "Разблокировать Родительский Контроль"
#~ msgid "Unlocked"
#~ msgstr "Разблокировано"
#~ msgid "Update to"
#~ msgstr "Обновить до"
#~ msgid "Updating"
#~ msgstr "обновляю"
#~ msgid "Updating Language Files..."
#~ msgstr "Обновление языковых файлов..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Обновление WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Широкоформатный фикс"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "У Вас не включен Родительский Контроль. Если вы хотите использовать Родительский Контроль, включите его в установках Wii."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s может не загрузиться правильно если ваше Системное Меню не последней версии"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: knife.hu kavid\n"
"Language-Team: kavid\n"
@ -25,54 +25,15 @@ msgstr "已经被保存.内容尚未验证.部分代码可能无法作用.如果
msgid " is not on the server."
msgstr "不在服务器上"
msgid "0 (Everyone)"
msgstr "0 (全年龄)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (7岁以上)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 小时"
msgid "10 min"
msgstr "10 分钟"
msgid "2 (Teen 12+)"
msgstr "2 (12岁以上)"
msgid "20 min"
msgstr "20 分钟"
msgid "2D Cover Path"
msgstr "2D封面路径"
msgid "3 (Mature 16+)"
msgstr "3 (16岁以上)"
msgid "3 min"
msgstr "3 分钟"
msgid "30 min"
msgstr "30 分钟"
msgid "3D Cover Path"
msgstr "3D封面路径"
msgid "3D Covers"
msgstr "3D 封面"
msgid "4 (Adults Only 18+)"
msgstr "4 (18岁以上成人)"
msgid "5 min"
msgstr "5 分钟"
msgid ">> Deleting tickets..."
msgstr ">> 删除 tickets..."
@ -136,19 +97,13 @@ msgstr "USB Loader GX 功能已解锁."
msgid "Alternate DOL"
msgstr "可选择Alt DOL文件"
msgid "An Error occured"
msgstr "发生一个错误"
msgid "Anti"
msgstr "防止"
msgid "App Language"
msgstr "语言设定"
msgid "Apr"
msgstr "四月"
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr ""
msgid "AutoInit Network"
msgstr "自动检测网络"
msgid "AutoPatch"
msgstr "自动修改"
msgid "BCA Codes Path"
msgstr ""
@ -199,9 +151,6 @@ msgstr "启动/标准"
msgid "Boot?"
msgstr "启动?"
msgid "Both"
msgstr "全部"
msgid "Can't be formatted"
msgstr "无法格式化"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "作弊码文件是空的"
msgid "Checking for Updates"
msgstr "检测软件最新版本"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "控制台"
msgid "Console Default"
msgstr "主机默认"
msgid "Console Locked"
msgstr "主机锁定"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "无法建立 GCT 文件"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "作者信息"
msgid "Custom Paths"
msgstr "自定义路径"
msgid "Customs/Original"
msgstr "自定义/官方"
msgid "DOL Path"
msgstr "DOL 路径"
@ -365,15 +309,9 @@ msgstr "光盘图片下载"
msgid "Disc Artwork Path"
msgstr "光盘图片路径"
msgid "Disc Default"
msgstr "游戏默认"
msgid "Disc Images"
msgstr "光盘图片"
msgid "DiskFlip"
msgstr "光盘滑动"
msgid "Display"
msgstr "显示"
@ -404,6 +342,9 @@ msgstr ""
msgid "Do you want to format:"
msgstr "是否格式化:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "使用这个已知是正确的 Alt DOL 文件?"
@ -434,26 +375,26 @@ msgstr "下载完成"
msgid "Download request failed."
msgstr ""
msgid "Downloading"
msgstr "下载"
msgid "Downloading Page List:"
msgstr ""
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "下载文件:"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr ""
msgid "Dutch"
msgstr "荷文"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "错误"
@ -464,9 +405,6 @@ msgstr "错误:"
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr "英文"
msgid "Error"
msgstr "错误"
@ -476,15 +414,24 @@ msgstr "错误 !"
msgid "Error 002 fix"
msgstr "002 错误修正"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "读取光盘错误"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "传送数据错误."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr ""
msgid "Failed to open partition"
msgstr "打开分区失败"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "二月"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "按键规则"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "格式化"
@ -545,15 +486,9 @@ msgstr "格式化中, 请稍候..."
msgid "Free Space"
msgstr "剩余空间"
msgid "French"
msgstr "法文"
msgid "Full Shutdown"
msgstr "完全关机"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "作弊码路径"
@ -566,9 +501,6 @@ msgstr "界面设置"
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr "游戏 ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "游戏载入"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "游戏区域"
msgid "Game Size"
msgstr "游戏容量"
@ -599,18 +528,12 @@ msgstr "已安装的游戏:"
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "游戏"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "德文"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "插入 SD 卡使用此功能."
msgid "Install"
msgstr "安装"
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr "安装错误!"
@ -691,21 +611,12 @@ msgstr "安装 title... 完成!"
msgid "Installing wad"
msgstr "安裝 WAD"
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "看來你有一些能帮到我们的信息.请将这些信息发送给开发团队.%s - %i"
msgid "Italian"
msgstr "意大利文"
msgid "Jan"
msgstr "一月"
msgid "Japanese"
msgstr "日文"
msgid "July"
msgstr "七月"
@ -718,9 +629,6 @@ msgstr "保持"
msgid "Keyboard"
msgstr "键盘"
msgid "Korean"
msgstr "韩文"
msgid "Language File"
msgstr "语言文件"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "语言文件路径已变更"
msgid "Left"
msgstr "左"
msgid "Like SysMenu"
msgstr "同系统选单"
msgid "Load"
msgstr "载入"
msgid "Load From SD/USB"
msgstr "从 SD/USB 载入"
#, c-format
msgid "Load file from: %s ?"
msgstr "从%s 载入文件?"
@ -752,6 +651,9 @@ msgstr "从%s 载入文件?"
msgid "Load this DOL as alternate DOL?"
msgstr "载入这个 DOL 作为 ALT DOL?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "载入标准语言"
@ -761,16 +663,7 @@ msgstr "载入标准音乐."
msgid "Lock Console"
msgstr "锁定控制台"
msgid "Locked"
msgstr "已锁定"
msgid "Loop Directory"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "音量"
msgid "Neither"
msgstr "全不"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "新光盘已检测"
msgid "Next"
msgstr "往后"
msgid "No"
msgstr "否"
@ -839,12 +729,6 @@ msgstr "没有可用更新"
msgid "No themes found on the site."
msgstr ""
msgid "None"
msgstr ""
msgid "Normal"
msgstr "一般"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "关闭"
msgid "OK"
msgstr "确定"
msgid "ON"
msgstr "开启"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "官方网址:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "仅自定义"
msgid "Only Original"
msgstr "仅官方"
msgid "Only for Install"
msgstr "仅安装"
msgid "Original/Customs"
msgstr "官方/自定义"
msgid "Parental Control"
msgstr "家长控制"
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr "分区"
@ -947,9 +813,6 @@ msgstr "游戏计数"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "请等待..."
msgid "Power off the Wii"
msgstr "关闭 Wii 主机"
msgid "Prev"
msgstr "往前"
msgid "Prompts Buttons"
msgstr "显示校正"
@ -974,9 +834,6 @@ msgstr "发行"
msgid "Quick Boot"
msgstr "快速启动"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "读取 WAD 数据... 完成!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "返回 Wii 主菜单"
msgid "Right"
msgstr "右"
msgid "Rumble"
msgstr "震动"
msgid "SChinese"
msgstr "简体中文"
msgid "SFX Volume"
msgstr "SFX 音量"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "选择一个 DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "九月"
@ -1085,15 +933,6 @@ msgstr "声音"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr ""
msgid "Sound+Quiet"
msgstr ""
msgid "Spanish"
msgstr "西班牙文"
msgid "Special thanks to:"
msgstr "特别感谢"
@ -1121,24 +960,18 @@ msgstr ""
msgid "Successfully installed:"
msgstr "成功安装:"
msgid "System Default"
msgstr "系统默认"
msgid "TChinese"
msgstr "繁体中文"
msgid "TXT Cheatcodes Path"
msgstr "TXT 作弊码文件路径"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "已进入的目录不存在。你想要创建一个目录吗?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WAD 已安装,但文件无法从 SD 卡中删除."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "WAD 安装失败,错误号 %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr ""
@ -1152,6 +985,9 @@ msgstr "主题路径"
msgid "Theme Title:"
msgstr ""
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr ""
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "找不到 USB 设备"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX 被锁定"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "不能打开刚下载的 WAD 文件 (%s)."
msgid "Uninstall"
msgstr "删除"
@ -1201,15 +1039,12 @@ msgstr "卸载 WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "请解锁后使用此功能"
msgid "Unlocked"
msgstr "已解锁"
msgid "Unsupported format, try to extract manually."
msgstr ""
@ -1234,21 +1069,12 @@ msgstr "升级全部语言文件"
msgid "Update failed"
msgstr "升级失败"
msgid "Update to"
msgstr "升级到"
msgid "Updating"
msgstr "升级中"
msgid "Updating Language Files..."
msgstr "升级语言文件..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "正在升级语言文件:"
msgid "Updating WiiTDB.zip"
msgstr "正在升级 WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "上传已安装Zip文件到自制程序目录"
@ -1280,9 +1106,6 @@ msgstr "要升级么?"
msgid "WiFi Features"
msgstr "WiFi 功能"
msgid "Widescreen Fix"
msgstr "宽屏校正"
msgid "Wii Menu"
msgstr "Wii 系统菜单"
@ -1310,9 +1133,6 @@ msgstr "是"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr ""
@ -1377,6 +1197,177 @@ msgstr "的"
msgid "seconds left"
msgstr "剩余秒数"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (全年龄)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (7岁以上)"
#~ msgid "1 hour"
#~ msgstr "1 小时"
#~ msgid "10 min"
#~ msgstr "10 分钟"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (12岁以上)"
#~ msgid "20 min"
#~ msgstr "20 分钟"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (16岁以上)"
#~ msgid "3 min"
#~ msgstr "3 分钟"
#~ msgid "30 min"
#~ msgstr "30 分钟"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (18岁以上成人)"
#~ msgid "5 min"
#~ msgstr "5 分钟"
#~ msgid "An Error occured"
#~ msgstr "发生一个错误"
#~ msgid "Anti"
#~ msgstr "防止"
#~ msgid "AutoPatch"
#~ msgstr "自动修改"
#~ msgid "Both"
#~ msgstr "全部"
#~ msgid "Checking for Updates"
#~ msgstr "检测软件最新版本"
#~ msgid "Console Default"
#~ msgstr "主机默认"
#~ msgid "Customs/Original"
#~ msgstr "自定义/官方"
#~ msgid "Disc Default"
#~ msgstr "游戏默认"
#~ msgid "DiskFlip"
#~ msgstr "光盘滑动"
#~ msgid "Downloading"
#~ msgstr "下载"
#~ msgid "Dutch"
#~ msgstr "荷文"
#~ msgid "English"
#~ msgstr "英文"
#~ msgid "French"
#~ msgstr "法文"
#~ msgid "Game ID"
#~ msgstr "游戏 ID"
#~ msgid "Game Region"
#~ msgstr "游戏区域"
#~ msgid "German"
#~ msgstr "德文"
#~ msgid "Italian"
#~ msgstr "意大利文"
#~ msgid "Japanese"
#~ msgstr "日文"
#~ msgid "Korean"
#~ msgstr "韩文"
#~ msgid "Left"
#~ msgstr "左"
#~ msgid "Like SysMenu"
#~ msgstr "同系统选单"
#~ msgid "Load From SD/USB"
#~ msgstr "从 SD/USB 载入"
#~ msgid "Locked"
#~ msgstr "已锁定"
#~ msgid "Neither"
#~ msgstr "全不"
#~ msgid "Next"
#~ msgstr "往后"
#~ msgid "Normal"
#~ msgstr "一般"
#~ msgid "ON"
#~ msgstr "开启"
#~ msgid "Only Customs"
#~ msgstr "仅自定义"
#~ msgid "Only Original"
#~ msgstr "仅官方"
#~ msgid "Only for Install"
#~ msgstr "仅安装"
#~ msgid "Original/Customs"
#~ msgstr "官方/自定义"
#~ msgid "Prev"
#~ msgstr "往前"
#~ msgid "Right"
#~ msgstr "右"
#~ msgid "SChinese"
#~ msgstr "简体中文"
#~ msgid "Spanish"
#~ msgstr "西班牙文"
#~ msgid "System Default"
#~ msgstr "系统默认"
#~ msgid "TChinese"
#~ msgstr "繁体中文"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WAD 已安装,但文件无法从 SD 卡中删除."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "WAD 安装失败,错误号 %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "不能打开刚下载的 WAD 文件 (%s)."
#~ msgid "Unlocked"
#~ msgstr "已解锁"
#~ msgid "Update to"
#~ msgstr "升级到"
#~ msgid "Updating"
#~ msgstr "升级中"
#~ msgid "Updating Language Files..."
#~ msgstr "升级语言文件..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "正在升级 WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "宽屏校正"
#~ msgid "Back to Wii Menu"
#~ msgstr "返回 Wii 系统菜单"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: SirPalax\n"
"Language-Team: Penn, SirPalax\n"
@ -25,54 +25,15 @@ msgstr " ha sido Guardado. Algún código puede no funcionar correctamente. Si e
msgid " is not on the server."
msgstr " no existe en el servidor."
msgid "0 (Everyone)"
msgstr "0 (Todos)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Niños 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 hora"
msgid "10 min"
msgstr "10 min."
msgid "2 (Teen 12+)"
msgstr "2 (Adolescentes 12+)"
msgid "20 min"
msgstr "20 min."
msgid "2D Cover Path"
msgstr "Ruta Carátulas 2D"
msgid "3 (Mature 16+)"
msgstr "3 (Jóvenes 16+)"
msgid "3 min"
msgstr "3 min."
msgid "30 min"
msgstr "30 min."
msgid "3D Cover Path"
msgstr "Ruta Carátulas 3D"
msgid "3D Covers"
msgstr "3D"
msgid "4 (Adults Only 18+)"
msgstr "4 (Sólo Adultos 18+)"
msgid "5 min"
msgstr "5 min."
msgid ">> Deleting tickets..."
msgstr ">> Borrando tickets..."
@ -136,20 +97,14 @@ msgstr "Todas las características del USB Loader GX desbloqueadas."
msgid "Alternate DOL"
msgstr "DOL Alternativo"
msgid "An Error occured"
msgstr "Ocurrió un Error"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Idioma Aplicación"
msgid "Apr"
msgstr "Abr"
msgid "Are you sure you want to enable Parent Control?"
msgstr "¿Estás seguro de querer activar el Control Parental?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Autor:"
msgid "AutoInit Network"
msgstr "AutoIniciar la Red"
msgid "AutoPatch"
msgstr "AutoParchear"
msgid "BCA Codes Path"
msgstr "Ruta Códigos BCA"
@ -199,9 +151,6 @@ msgstr "Inicio/Estándar"
msgid "Boot?"
msgstr "¿Ejecutar?"
msgid "Both"
msgstr "Ambos"
msgid "Can't be formatted"
msgstr "No se puede formatear"
@ -226,9 +175,6 @@ msgstr "Cambiar Ruta"
msgid "Cheatfile is blank"
msgstr "El archivo de Trucos está vacio"
msgid "Checking for Updates"
msgstr "Comprobando actualizaciones"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Conexión perdida..."
msgid "Console"
msgstr "Consola"
msgid "Console Default"
msgstr "Pred. Consola"
msgid "Console Locked"
msgstr "Consola Bloqueada"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "¡No se pudo crear el archivo GCT!"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Créditos"
msgid "Custom Paths"
msgstr "Personalizar Rutas"
msgid "Customs/Original"
msgstr "Artísticas/Originales"
msgid "DOL Path"
msgstr "Ruta del DOL"
@ -365,15 +309,9 @@ msgstr "Descarga Imagen Discos"
msgid "Disc Artwork Path"
msgstr "Ruta Imagen Discos"
msgid "Disc Default"
msgstr "Pred. Disco"
msgid "Disc Images"
msgstr "Imagen Discos"
msgid "DiskFlip"
msgstr "GiraDiscos"
msgid "Display"
msgstr "Mostrar"
@ -404,6 +342,9 @@ msgstr "¿Quieres descargar este Tema?"
msgid "Do you want to format:"
msgstr "Quieres formatear:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "¿Quieres usar el DOL Alternativo que se sabe es correcto?"
@ -434,26 +375,26 @@ msgstr "Descarga completada"
msgid "Download request failed."
msgstr "Error al solicitar la descarga."
msgid "Downloading"
msgstr "Descargando"
msgid "Downloading Page List:"
msgstr "Descargando Lista de Páginas:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Descargando archivo"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Descargando imagen:"
msgid "Dutch"
msgstr "Holandés"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr ""
@ -464,9 +405,6 @@ msgstr ""
msgid "ERROR: Can't set up theme."
msgstr "ERROR: No se puede configurar el tema."
msgid "English"
msgstr "Inglés"
msgid "Error"
msgstr ""
@ -476,15 +414,24 @@ msgstr "¡Error!"
msgid "Error 002 fix"
msgstr "Parchear Error 002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Error leyendo Disco"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Error durante la transferencia de datos."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "No se ha podido extraer"
msgid "Failed to open partition"
msgstr "No se ha podido abrir la partición"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr ""
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Desplazamiento X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formateo"
@ -545,15 +486,9 @@ msgstr "Formateando, por favor espera..."
msgid "Free Space"
msgstr "Espacio Libre"
msgid "French"
msgstr "Francés"
msgid "Full Shutdown"
msgstr "Apagado Total"
msgid "GAMEID_Gamename"
msgstr "IDdelJuego_NombreDelJuego"
msgid "GCT Cheatcodes Path"
msgstr "Ruta de Trucos GCT"
@ -566,9 +501,6 @@ msgstr "Configuración de la GUI"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "No se encuentra GXtheme.cfg en ninguna subcarpeta."
msgid "Game ID"
msgstr "ID del Juego"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Configuración de los Juegos"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Región"
msgid "Game Size"
msgstr "Tamaño del Juego"
@ -599,18 +528,12 @@ msgstr "El juego ya estaba instalado:"
msgid "Game partition"
msgstr "Partición de Juegos"
msgid "Gamename [GAMEID]"
msgstr "NombreDelJuego [IDdelJuego]"
msgid "Games"
msgstr "Juegos"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Alemán"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Insertar SD para usar esta opción"
msgid "Install"
msgstr "Instalar"
msgid "Install 1:1 Copy"
msgstr "Instalar Copias 1:1"
msgid "Install Error!"
msgstr "¡Error de Instalación!"
@ -691,21 +611,12 @@ msgstr "Instalando título... ¡Correcto!"
msgid "Installing wad"
msgstr "Instalando el WAD"
msgid "Invalid PIN code"
msgstr "Código PIN erróneo"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Parece que tienes alguna información que puede ser útil para nosotros. Por favor envía esta información al equipo desarrollador."
msgid "Italian"
msgstr "Italiano"
msgid "Jan"
msgstr "Ene"
msgid "Japanese"
msgstr "Japonés"
msgid "July"
msgstr "Jul"
@ -718,9 +629,6 @@ msgstr "Mantener"
msgid "Keyboard"
msgstr "Teclado"
msgid "Korean"
msgstr "Coreano"
msgid "Language File"
msgstr "Idiomas"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Ruta de idioma cambiada."
msgid "Left"
msgstr "Izquierda"
msgid "Like SysMenu"
msgstr "Como Menú Sist."
msgid "Load"
msgstr "Cargar"
msgid "Load From SD/USB"
msgstr "Cargar desde SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "¿Cargar el archivo desde: %s ?"
@ -752,6 +651,9 @@ msgstr "¿Cargar el archivo desde: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "¿Cargar este DOL como DOL Alternativo?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Cargando idioma estándar."
@ -761,17 +663,8 @@ msgstr "Cargando música estándar."
msgid "Lock Console"
msgstr "Bloquear consola"
msgid "Locked"
msgstr "Bloqueada"
msgid "Loop Directory"
msgstr "Carpeta de bucle"
msgid "Loop Music"
msgstr "Bucle musical"
msgid "Loop Sound"
msgstr "Bucle de sonido"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr ""
@ -794,15 +687,12 @@ msgstr "Modo Bucle Musical"
msgid "Music Volume"
msgstr "Volumen de la Música"
msgid "Neither"
msgstr "Ninguno"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Nuevo Disco Detectado"
msgid "Next"
msgstr "Siguiente"
msgid "No"
msgstr ""
@ -839,12 +729,6 @@ msgstr "No hay nuevas actualizaciones."
msgid "No themes found on the site."
msgstr "No hay Temas en este sitio."
msgid "None"
msgstr "Ninguno"
msgid "Normal"
msgstr ""
msgid "Not a WAD file."
msgstr "No es un archivo WAD."
@ -884,9 +768,6 @@ msgstr "Apagado"
msgid "OK"
msgstr "Aceptar"
msgid "ON"
msgstr "Encendido"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Página Oficial:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Sólo Artísticas"
msgid "Only Original"
msgstr "Sólo Originales"
msgid "Only for Install"
msgstr "Sólo al instalar"
msgid "Original/Customs"
msgstr "Originales/Artísticas"
msgid "Parental Control"
msgstr "Control Parental"
msgid "Parental Control disabled"
msgstr "Control Parental desactivado"
msgid "Partition"
msgstr "Partición"
@ -947,9 +813,6 @@ msgstr "Partidas"
msgid "Play Next"
msgstr "Oír Siguiente"
msgid "Play Once"
msgstr "Oir una vez"
msgid "Play Previous"
msgstr "Oír Anterior"
@ -962,9 +825,6 @@ msgstr "Por favor, espera..."
msgid "Power off the Wii"
msgstr "Apagar la Wii"
msgid "Prev"
msgstr "Ant."
msgid "Prompts Buttons"
msgstr "Botones"
@ -974,9 +834,6 @@ msgstr "Publicado por"
msgid "Quick Boot"
msgstr "Inicio Rápido"
msgid "Random Directory Music"
msgstr "Aleatorio de la carpeta musical"
msgid "Reading WAD data... Ok!"
msgstr "Leyendo datos del WAD... ¡Correcto!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Volver a Menú Wii"
msgid "Right"
msgstr "Derecha"
msgid "Rumble"
msgstr "Vibración"
msgid "SChinese"
msgstr "Chino S."
msgid "SFX Volume"
msgstr "Volumen de los Efectos"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Seleccionar DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr ""
@ -1085,15 +933,6 @@ msgstr "Sonido"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Sonido+Música Fondo"
msgid "Sound+Quiet"
msgstr "Sonido+Silencio"
msgid "Spanish"
msgstr "Español"
msgid "Special thanks to:"
msgstr "Agradecimientos especiales a:"
@ -1121,24 +960,18 @@ msgstr "Tema extraido correctamente."
msgid "Successfully installed:"
msgstr "Instalado correctamente:"
msgid "System Default"
msgstr "Pred. Sistema"
msgid "TChinese"
msgstr "Chino T."
msgid "TXT Cheatcodes Path"
msgstr "Ruta de Trucos TXT"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "La carpeta especificada no existe. ¿Quieres crearla?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "El archivo WAD se ha instalado. Pero no puede ser borrado de la tarjeta SD."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "La instalación del WAD falló con el error %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Ruta Descarga Temas"
@ -1152,6 +985,9 @@ msgstr "Ruta del Tema"
msgid "Theme Title:"
msgstr "Título del Tema:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Error en la transferencia."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB no encontrado"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX está protegido"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "No se puede abrir el WAD que acabas de descargar (%s)."
msgid "Uninstall"
msgstr "Desinstalar"
@ -1201,15 +1039,12 @@ msgstr "Desinstalando el WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Desbloquear Control Parental"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Desbloquea la consola para usar esta opción."
msgid "Unlocked"
msgstr "Desbloqueada"
msgid "Unsupported format, try to extract manually."
msgstr "Formato no soportado, prueba a extraer manualmente."
@ -1234,21 +1069,12 @@ msgstr "Actualizar todos los archivos de Idiomas"
msgid "Update failed"
msgstr "Error en la Actualización"
msgid "Update to"
msgstr "Descargando la"
msgid "Updating"
msgstr "Actualizando"
msgid "Updating Language Files..."
msgstr "Actualizando archivos de Idiomas..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Actualizando archivos de Idiomas:"
msgid "Updating WiiTDB.zip"
msgstr "Actualizando WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Enviado archivo ZIP instalado en la carpeta homebrew."
@ -1280,9 +1106,6 @@ msgstr "¿Qué quieres actualizar?"
msgid "WiFi Features"
msgstr "Características WiFi"
msgid "Widescreen Fix"
msgstr "Ajuste panorámico"
msgid "Wii Menu"
msgstr "Menú de Wii"
@ -1310,9 +1133,6 @@ msgstr "Sí"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "No tienes el Control Parental activado. Si quieres usar el Control Parental, actívalo en la Configuración de la Wii."
msgid "You need to select or format a partition"
msgstr "Necesitas seleccionar o formatear una partición"
@ -1377,6 +1197,219 @@ msgstr "de"
msgid "seconds left"
msgstr "segundos restantes"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Instalar Copias 1:1"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Todos)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Niños 7+)"
#~ msgid "1 hour"
#~ msgstr "1 hora"
#~ msgid "10 min"
#~ msgstr "10 min."
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Adolescentes 12+)"
#~ msgid "20 min"
#~ msgstr "20 min."
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Jóvenes 16+)"
#~ msgid "3 min"
#~ msgstr "3 min."
#~ msgid "30 min"
#~ msgstr "30 min."
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Sólo Adultos 18+)"
#~ msgid "5 min"
#~ msgstr "5 min."
#~ msgid "An Error occured"
#~ msgstr "Ocurrió un Error"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "¿Estás seguro de querer activar el Control Parental?"
#~ msgid "AutoPatch"
#~ msgstr "AutoParchear"
#~ msgid "Both"
#~ msgstr "Ambos"
#~ msgid "Checking for Updates"
#~ msgstr "Comprobando actualizaciones"
#~ msgid "Console Default"
#~ msgstr "Pred. Consola"
#~ msgid "Customs/Original"
#~ msgstr "Artísticas/Originales"
#~ msgid "Disc Default"
#~ msgstr "Pred. Disco"
#~ msgid "DiskFlip"
#~ msgstr "GiraDiscos"
#~ msgid "Downloading"
#~ msgstr "Descargando"
#~ msgid "Dutch"
#~ msgstr "Holandés"
#~ msgid "English"
#~ msgstr "Inglés"
#~ msgid "French"
#~ msgstr "Francés"
#~ msgid "GAMEID_Gamename"
#~ msgstr "IDdelJuego_NombreDelJuego"
#~ msgid "Game ID"
#~ msgstr "ID del Juego"
#~ msgid "Game Region"
#~ msgstr "Región"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "NombreDelJuego [IDdelJuego]"
#~ msgid "German"
#~ msgstr "Alemán"
#~ msgid "Invalid PIN code"
#~ msgstr "Código PIN erróneo"
#~ msgid "Italian"
#~ msgstr "Italiano"
#~ msgid "Japanese"
#~ msgstr "Japonés"
#~ msgid "Korean"
#~ msgstr "Coreano"
#~ msgid "Left"
#~ msgstr "Izquierda"
#~ msgid "Like SysMenu"
#~ msgstr "Como Menú Sist."
#~ msgid "Load From SD/USB"
#~ msgstr "Cargar desde SD/USB"
#~ msgid "Locked"
#~ msgstr "Bloqueada"
#~ msgid "Loop Directory"
#~ msgstr "Carpeta de bucle"
#~ msgid "Loop Music"
#~ msgstr "Bucle musical"
#~ msgid "Loop Sound"
#~ msgstr "Bucle de sonido"
#~ msgid "Neither"
#~ msgstr "Ninguno"
#~ msgid "Next"
#~ msgstr "Siguiente"
#~ msgid "None"
#~ msgstr "Ninguno"
#~ msgid "ON"
#~ msgstr "Encendido"
#~ msgid "Only Customs"
#~ msgstr "Sólo Artísticas"
#~ msgid "Only Original"
#~ msgstr "Sólo Originales"
#~ msgid "Only for Install"
#~ msgstr "Sólo al instalar"
#~ msgid "Original/Customs"
#~ msgstr "Originales/Artísticas"
#~ msgid "Parental Control disabled"
#~ msgstr "Control Parental desactivado"
#~ msgid "Play Once"
#~ msgstr "Oir una vez"
#~ msgid "Prev"
#~ msgstr "Ant."
#~ msgid "Random Directory Music"
#~ msgstr "Aleatorio de la carpeta musical"
#~ msgid "Right"
#~ msgstr "Derecha"
#~ msgid "SChinese"
#~ msgstr "Chino S."
#~ msgid "Sound+BGM"
#~ msgstr "Sonido+Música Fondo"
#~ msgid "Sound+Quiet"
#~ msgstr "Sonido+Silencio"
#~ msgid "Spanish"
#~ msgstr "Español"
#~ msgid "System Default"
#~ msgstr "Pred. Sistema"
#~ msgid "TChinese"
#~ msgstr "Chino T."
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "El archivo WAD se ha instalado. Pero no puede ser borrado de la tarjeta SD."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "La instalación del WAD falló con el error %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "No se puede abrir el WAD que acabas de descargar (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Desbloquear Control Parental"
#~ msgid "Unlocked"
#~ msgstr "Desbloqueada"
#~ msgid "Update to"
#~ msgstr "Descargando la"
#~ msgid "Updating"
#~ msgstr "Actualizando"
#~ msgid "Updating Language Files..."
#~ msgstr "Actualizando archivos de Idiomas..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Actualizando WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Ajuste panorámico"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "No tienes el Control Parental activado. Si quieres usar el Control Parental, actívalo en la Configuración de la Wii."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s No puede arrancar correctamente si el Menú de Sistema no está actualizado."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2010-01-19 17:39+0200\n"
"Last-Translator: Katsurou\n"
"Language-Team: Katsurou, pirateX\n"
@ -25,54 +25,15 @@ msgstr "har sparats. Texten har inte blivit varifierad. Några av koderna kanske
msgid " is not on the server."
msgstr "finns inte på servern."
msgid "0 (Everyone)"
msgstr "0 (Alla)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Barn 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 timme"
msgid "10 min"
msgstr ""
msgid "2 (Teen 12+)"
msgstr "2 (Tonåringar 12+)"
msgid "20 min"
msgstr ""
msgid "2D Cover Path"
msgstr "2D Omslagsmapp"
msgid "3 (Mature 16+)"
msgstr "3 (Ungdomar 16+)"
msgid "3 min"
msgstr ""
msgid "30 min"
msgstr ""
msgid "3D Cover Path"
msgstr "3D Omslagsmapp"
msgid "3D Covers"
msgstr "3D-Omslag"
msgid "4 (Adults Only 18+)"
msgstr "4 (Endast Vuxna 18+)"
msgid "5 min"
msgstr ""
msgid ">> Deleting tickets..."
msgstr ">> Raderar biljetter..."
@ -136,20 +97,14 @@ msgstr "Alla funktioner i USB Loader GX är upplåsta."
msgid "Alternate DOL"
msgstr "Alternativ DOL"
msgid "An Error occured"
msgstr "Ett fel har uppstått"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Programspråk"
msgid "Apr"
msgstr "Apr"
msgid "Are you sure you want to enable Parent Control?"
msgstr "Är du säker på att du vill aktivera Föräldrakontroll?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "Utgivare:"
msgid "AutoInit Network"
msgstr "Autoinitiera Nätverk"
msgid "AutoPatch"
msgstr "Autopatch"
msgid "BCA Codes Path"
msgstr "BCA kodssökväg"
@ -199,9 +151,6 @@ msgstr "Boot/Standard"
msgid "Boot?"
msgstr "Starta?"
msgid "Both"
msgstr "Båda"
msgid "Can't be formatted"
msgstr "Kan inte formateras"
@ -226,9 +175,6 @@ msgstr "Ändra spel sökväg"
msgid "Cheatfile is blank"
msgstr "Fuskfilen är blank"
msgid "Checking for Updates"
msgstr "Letar efter uppdateringar"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "Uppkoppling förlorad..."
msgid "Console"
msgstr "Konsol"
msgid "Console Default"
msgstr "Konsolestandard"
msgid "Console Locked"
msgstr "Konsol låst"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "Kunde inte skapa GCT fil"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Medverkande"
msgid "Custom Paths"
msgstr "Anpassade sökvägar"
msgid "Customs/Original"
msgstr "Anpassade/Original"
msgid "DOL Path"
msgstr "DOL-sökväg"
@ -365,15 +309,9 @@ msgstr "Skivbildsnedladdning"
msgid "Disc Artwork Path"
msgstr "Skivbildsmapp"
msgid "Disc Default"
msgstr "Skivans standard"
msgid "Disc Images"
msgstr "Skivbilder"
msgid "DiskFlip"
msgstr "Vänd Skiva"
msgid "Display"
msgstr "Visning"
@ -404,6 +342,9 @@ msgstr "Vill du ladda ner detta tema?"
msgid "Do you want to format:"
msgstr "Vill du formatera:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Vill du använda en alternativ DOL som är känd att fungera?"
@ -434,26 +375,26 @@ msgstr "Nedladdning klar"
msgid "Download request failed."
msgstr "Nedladdnings begäran misslyckades."
msgid "Downloading"
msgstr "Laddar ner"
msgid "Downloading Page List:"
msgstr "Laddar ner lista:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Laddar ner fil:"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "Laddar ner bild:"
msgid "Dutch"
msgstr "Nederländska"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "FEL"
@ -464,9 +405,6 @@ msgstr "FEL:"
msgid "ERROR: Can't set up theme."
msgstr "FEL: Kan inte ställa in tema"
msgid "English"
msgstr "Engelska"
msgid "Error"
msgstr "Fel"
@ -476,15 +414,24 @@ msgstr "Fel!"
msgid "Error 002 fix"
msgstr "002 fel fix"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Fel vid läsning av skiva"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Fel vid överförning av data."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Uppackning misslyckades."
msgid "Failed to open partition"
msgstr "Misslyckades att öppna partition"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr ""
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Vänd-X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Formatera"
@ -545,15 +486,9 @@ msgstr "Formaterar, Vänta..."
msgid "Free Space"
msgstr "Ledigt utrymme"
msgid "French"
msgstr "Franska"
msgid "Full Shutdown"
msgstr "Stäng av helt"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "Fusksökväg"
@ -566,9 +501,6 @@ msgstr "GUI inställningar"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "GXtheme.cfg kunde inte hittas i några undermappar."
msgid "Game ID"
msgstr "Spel-ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Spelinställningar"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Spelregion"
msgid "Game Size"
msgstr "Spelstorlek"
@ -599,18 +528,12 @@ msgstr "Spelet är redan installerat:"
msgid "Game partition"
msgstr "Spel partition"
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Spel"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Tyska"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Sätt i ett SD-kort för att använda denna inställning"
msgid "Install"
msgstr "Installera"
msgid "Install 1:1 Copy"
msgstr "Installera 1:1 Kopia"
msgid "Install Error!"
msgstr "Fel vid installering!"
@ -691,21 +611,12 @@ msgstr "Installerar titel... Ok!"
msgid "Installing wad"
msgstr "Installerar wad"
msgid "Invalid PIN code"
msgstr "Ogiltig PIN-kod"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "Det verkar som om du har information som kan vara till nytta för oss. Vänligen skicka informationen vidare till DEV team."
msgid "Italian"
msgstr "Italienska"
msgid "Jan"
msgstr ""
msgid "Japanese"
msgstr "Japanska"
msgid "July"
msgstr "Juli"
@ -718,9 +629,6 @@ msgstr "Behåll"
msgid "Keyboard"
msgstr "Tangentbord"
msgid "Korean"
msgstr "Koreanska"
msgid "Language File"
msgstr "Språk fil"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Sökväg till språk ändrad"
msgid "Left"
msgstr "Vänster"
msgid "Like SysMenu"
msgstr "Som System-menyn"
msgid "Load"
msgstr "Ladda"
msgid "Load From SD/USB"
msgstr "Ladda från SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "Ladda fil från: %s?"
@ -752,6 +651,9 @@ msgstr "Ladda fil från: %s?"
msgid "Load this DOL as alternate DOL?"
msgstr "Ladda denna DOL som alternativ DOL?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Laddar standard språk."
@ -761,18 +663,9 @@ msgstr "Laddar standard musik."
msgid "Lock Console"
msgstr "Lås konsol"
msgid "Locked"
msgstr "Låst"
msgid "Loop Directory"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgstr "Loopa ljudet"
msgid "Mar"
msgstr ""
@ -794,15 +687,12 @@ msgstr "Musik Återuppspelningsläge"
msgid "Music Volume"
msgstr "Volym"
msgid "Neither"
msgstr "Inget"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Ny skiva upptäckt"
msgid "Next"
msgstr "Nästa"
msgid "No"
msgstr "Nej"
@ -839,12 +729,6 @@ msgstr "Inga nya uppdateringar"
msgid "No themes found on the site."
msgstr "Inga teman hittades på sidan."
msgid "None"
msgstr ""
msgid "Normal"
msgstr "Vanlig"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "AV"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "PÅ"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Officiell sida:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Endast anpassade"
msgid "Only Original"
msgstr "Endast original"
msgid "Only for Install"
msgstr "Endast för installering"
msgid "Original/Customs"
msgstr "Original/Anpassade"
msgid "Parental Control"
msgstr "Föräldrakontroll"
msgid "Parental Control disabled"
msgstr "Föräldrakontroll avaktiverad"
msgid "Partition"
msgstr ""
@ -947,9 +813,6 @@ msgstr "Spelat"
msgid "Play Next"
msgstr "Spela nästa"
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr "Spela förgående"
@ -962,9 +825,6 @@ msgstr "Vänligen vänta..."
msgid "Power off the Wii"
msgstr "Stäng av Wii"
msgid "Prev"
msgstr "Förra"
msgid "Prompts Buttons"
msgstr "Dialogknappar"
@ -974,9 +834,6 @@ msgstr "Publicerat av"
msgid "Quick Boot"
msgstr "Snabbstart"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "Läser WAD data... Ok!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Återvänd till Wii-menyn"
msgid "Right"
msgstr "Höger"
msgid "Rumble"
msgstr "Vibration"
msgid "SChinese"
msgstr "SKinesiska"
msgid "SFX Volume"
msgstr "SFX Volym"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Välj en DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr ""
@ -1085,15 +933,6 @@ msgstr "Ljud"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Ljud+BGM"
msgid "Sound+Quiet"
msgstr "Ljud+Tyst"
msgid "Spanish"
msgstr "Spanska"
msgid "Special thanks to:"
msgstr "Speciellt tack till:"
@ -1121,24 +960,18 @@ msgstr "Extrahering av tema lyckades."
msgid "Successfully installed:"
msgstr "Lyckad installation av:"
msgid "System Default"
msgstr "Systemets standard"
msgid "TChinese"
msgstr "TKinesiska"
msgid "TXT Cheatcodes Path"
msgstr "Sökväg till txt koder"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Den angivna katalogen existerar inte. Vill du skapa den?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "Wad filen har blivit installerad. Men kunde inte raderas från SD-kortet."
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "Wad installation misslyckades med fel %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Tema-mapp nedladdade"
@ -1152,6 +985,9 @@ msgstr "Tema-mapp"
msgid "Theme Title:"
msgstr "Tema titel:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Flytt misslyckades."
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB-enhet ej hittad"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX är skyddad"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Kunde inte öppna den nedladdade wad filen (%s)."
msgid "Uninstall"
msgstr "Avinstallera"
@ -1201,15 +1039,12 @@ msgstr "Avinstallerar wad"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "Lås upp föräldrakontroll"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Lås upp konsolen för denna inställning."
msgid "Unlocked"
msgstr "Upplåst"
msgid "Unsupported format, try to extract manually."
msgstr "Format stöds inte, försök extrahera manuelt."
@ -1234,21 +1069,12 @@ msgstr "Uppdatera alla språk-filer"
msgid "Update failed"
msgstr "Uppdatering misslyckades"
msgid "Update to"
msgstr "Uppdatera till"
msgid "Updating"
msgstr "Uppdaterar"
msgid "Updating Language Files..."
msgstr "Uppdatera språk-filer..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Uppdatera språk-filer:"
msgid "Updating WiiTDB.zip"
msgstr "Uppdaterar WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "Uppladdad ZIP fil installerad till homebrew-mappen"
@ -1280,9 +1106,6 @@ msgstr "Vad vill du uppdatera?"
msgid "WiFi Features"
msgstr "WiFi funktioner"
msgid "Widescreen Fix"
msgstr "Bredbild 16/9 Fix"
msgid "Wii Menu"
msgstr "Wii-meny"
@ -1310,9 +1133,6 @@ msgstr "Ja"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "Du har inte föräldrakontroll aktiverad. Om du vill använda föräldrakontroll, aktivera det i Wii inställningar."
msgid "You need to select or format a partition"
msgstr "Du måste välja eller formatera en partition"
@ -1377,6 +1197,186 @@ msgstr "av"
msgid "seconds left"
msgstr "sekunder kvar"
#~ msgid "Install 1:1 Copy"
#~ msgstr "Installera 1:1 Kopia"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Alla)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Barn 7+)"
#~ msgid "1 hour"
#~ msgstr "1 timme"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Tonåringar 12+)"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Ungdomar 16+)"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Endast Vuxna 18+)"
#~ msgid "An Error occured"
#~ msgstr "Ett fel har uppstått"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "Är du säker på att du vill aktivera Föräldrakontroll?"
#~ msgid "AutoPatch"
#~ msgstr "Autopatch"
#~ msgid "Both"
#~ msgstr "Båda"
#~ msgid "Checking for Updates"
#~ msgstr "Letar efter uppdateringar"
#~ msgid "Console Default"
#~ msgstr "Konsolestandard"
#~ msgid "Customs/Original"
#~ msgstr "Anpassade/Original"
#~ msgid "Disc Default"
#~ msgstr "Skivans standard"
#~ msgid "DiskFlip"
#~ msgstr "Vänd Skiva"
#~ msgid "Downloading"
#~ msgstr "Laddar ner"
#~ msgid "Dutch"
#~ msgstr "Nederländska"
#~ msgid "English"
#~ msgstr "Engelska"
#~ msgid "French"
#~ msgstr "Franska"
#~ msgid "Game ID"
#~ msgstr "Spel-ID"
#~ msgid "Game Region"
#~ msgstr "Spelregion"
#~ msgid "German"
#~ msgstr "Tyska"
#~ msgid "Invalid PIN code"
#~ msgstr "Ogiltig PIN-kod"
#~ msgid "Italian"
#~ msgstr "Italienska"
#~ msgid "Japanese"
#~ msgstr "Japanska"
#~ msgid "Korean"
#~ msgstr "Koreanska"
#~ msgid "Left"
#~ msgstr "Vänster"
#~ msgid "Like SysMenu"
#~ msgstr "Som System-menyn"
#~ msgid "Load From SD/USB"
#~ msgstr "Ladda från SD/USB"
#~ msgid "Locked"
#~ msgstr "Låst"
#~ msgid "Loop Sound"
#~ msgstr "Loopa ljudet"
#~ msgid "Neither"
#~ msgstr "Inget"
#~ msgid "Next"
#~ msgstr "Nästa"
#~ msgid "Normal"
#~ msgstr "Vanlig"
#~ msgid "ON"
#~ msgstr "PÅ"
#~ msgid "Only Customs"
#~ msgstr "Endast anpassade"
#~ msgid "Only Original"
#~ msgstr "Endast original"
#~ msgid "Only for Install"
#~ msgstr "Endast för installering"
#~ msgid "Original/Customs"
#~ msgstr "Original/Anpassade"
#~ msgid "Parental Control disabled"
#~ msgstr "Föräldrakontroll avaktiverad"
#~ msgid "Prev"
#~ msgstr "Förra"
#~ msgid "Right"
#~ msgstr "Höger"
#~ msgid "SChinese"
#~ msgstr "SKinesiska"
#~ msgid "Sound+BGM"
#~ msgstr "Ljud+BGM"
#~ msgid "Sound+Quiet"
#~ msgstr "Ljud+Tyst"
#~ msgid "Spanish"
#~ msgstr "Spanska"
#~ msgid "System Default"
#~ msgstr "Systemets standard"
#~ msgid "TChinese"
#~ msgstr "TKinesiska"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "Wad filen har blivit installerad. Men kunde inte raderas från SD-kortet."
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "Wad installation misslyckades med fel %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Kunde inte öppna den nedladdade wad filen (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "Lås upp föräldrakontroll"
#~ msgid "Unlocked"
#~ msgstr "Upplåst"
#~ msgid "Update to"
#~ msgstr "Uppdatera till"
#~ msgid "Updating"
#~ msgstr "Uppdaterar"
#~ msgid "Updating Language Files..."
#~ msgstr "Uppdatera språk-filer..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "Uppdaterar WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "Bredbild 16/9 Fix"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "Du har inte föräldrakontroll aktiverad. Om du vill använda föräldrakontroll, aktivera det i Wii inställningar."
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s Kanske inte kan starta korrekt om din system meny inte är den nyaste versionen."

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2010-02-15 21:00+0800\n"
"Last-Translator: Jane.H\n"
"Language-Team: kyogc, Miller, Mika Li, Jane.H\n"
@ -25,54 +25,15 @@ msgstr "已經被儲存.內容尚未驗證.部分代碼可能無法作用.如果
msgid " is not on the server."
msgstr "不在伺服器上"
msgid "0 (Everyone)"
msgstr "0 (全年齡)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (7歲以上)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 小時"
msgid "10 min"
msgstr "10 分鐘"
msgid "2 (Teen 12+)"
msgstr "2 (12歲以上)"
msgid "20 min"
msgstr "20 分鐘"
msgid "2D Cover Path"
msgstr "2D封面路徑"
msgid "3 (Mature 16+)"
msgstr "3 (16歲以上)"
msgid "3 min"
msgstr "3 分鐘"
msgid "30 min"
msgstr "30 分鐘"
msgid "3D Cover Path"
msgstr "3D封面路徑"
msgid "3D Covers"
msgstr "3D 封面"
msgid "4 (Adults Only 18+)"
msgstr "4 (18歲以上成人)"
msgid "5 min"
msgstr "5 分鐘"
msgid ">> Deleting tickets..."
msgstr ">> 刪除 tickets..."
@ -136,20 +97,14 @@ msgstr "USB Loader GX 功能已解鎖."
msgid "Alternate DOL"
msgstr "可選擇Alt DOL文件"
msgid "An Error occured"
msgstr "發生一個錯誤"
msgid "Anti"
msgstr "防止"
msgid "App Language"
msgstr "語言設定"
msgid "Apr"
msgstr "四月"
msgid "Are you sure you want to enable Parent Control?"
msgstr "您確定要啟用家長控制?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
msgstr ""
@ -166,9 +121,6 @@ msgstr "作者"
msgid "AutoInit Network"
msgstr "自動檢查網路"
msgid "AutoPatch"
msgstr "自動修改"
msgid "BCA Codes Path"
msgstr "BAC 路徑"
@ -199,9 +151,6 @@ msgstr "啟動/標準"
msgid "Boot?"
msgstr "啟動?"
msgid "Both"
msgstr "全部"
msgid "Can't be formatted"
msgstr "無法格式化"
@ -226,9 +175,6 @@ msgstr "變更路徑"
msgid "Cheatfile is blank"
msgstr "金手指文件是空的"
msgid "Checking for Updates"
msgstr "檢查軟件最新版本"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr "遺失連接..."
msgid "Console"
msgstr "控制台"
msgid "Console Default"
msgstr "主機預設值"
msgid "Console Locked"
msgstr "控制台已鎖定"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "無法建立 GCT 文件"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "作者信息"
msgid "Custom Paths"
msgstr "自定路徑"
msgid "Customs/Original"
msgstr "自製/原始"
msgid "DOL Path"
msgstr "DOL 路徑"
@ -365,15 +309,9 @@ msgstr "下載光碟圖像"
msgid "Disc Artwork Path"
msgstr "光碟圖像路徑"
msgid "Disc Default"
msgstr "光碟預設"
msgid "Disc Images"
msgstr "光碟圖像"
msgid "DiskFlip"
msgstr "光碟滑動"
msgid "Display"
msgstr "顯示"
@ -404,6 +342,9 @@ msgstr "是否要下載這個佈景主題?"
msgid "Do you want to format:"
msgstr "是否格式化:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "使用這個已知是正確的 Alt DOL 文件?"
@ -434,26 +375,26 @@ msgstr "下載完成"
msgid "Download request failed."
msgstr "下載請求失敗"
msgid "Downloading"
msgstr "正在下載"
msgid "Downloading Page List:"
msgstr "下載主題預覽圖片"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "檔案下載中"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "下載圖片"
msgid "Dutch"
msgstr "荷蘭文"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "錯誤"
@ -464,9 +405,6 @@ msgstr "錯誤:"
msgid "ERROR: Can't set up theme."
msgstr "錯誤:無法設定佈景主題"
msgid "English"
msgstr "英文"
msgid "Error"
msgstr "錯誤"
@ -476,15 +414,24 @@ msgstr "錯誤 !"
msgid "Error 002 fix"
msgstr "修正002錯誤"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "讀取光碟錯誤"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "檔案傳輸過程錯誤"
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "提取失敗"
msgid "Failed to open partition"
msgstr "磁區開啟失敗"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "二月"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "按鍵規則"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "格式化"
@ -545,15 +486,9 @@ msgstr "格式化中, 請稍候..."
msgid "Free Space"
msgstr "剩餘空間"
msgid "French"
msgstr "法文"
msgid "Full Shutdown"
msgstr "關機"
msgid "GAMEID_Gamename"
msgstr "GAMEID_遊戲名稱"
msgid "GCT Cheatcodes Path"
msgstr "金手指檔案路徑"
@ -566,9 +501,6 @@ msgstr "介面設定"
msgid "GXtheme.cfg not found in any subfolder."
msgstr "無法在任何子目錄找到 GXtheme.cfg 檔案"
msgid "Game ID"
msgstr "遊戲 ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "遊戲載入設定"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "遊戲區碼"
msgid "Game Size"
msgstr "遊戲容量"
@ -599,18 +528,12 @@ msgstr "已安裝過遊戲:"
msgid "Game partition"
msgstr "遊戲磁區"
msgid "Gamename [GAMEID]"
msgstr "遊戲名稱 [GAMEID]"
msgid "Games"
msgstr "遊戲數量"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "德文"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "插入 SD 卡使用此功能."
msgid "Install"
msgstr "安裝"
msgid "Install 1:1 Copy"
msgstr "安裝用 1:1 複製"
msgid "Install Error!"
msgstr "安裝錯誤!"
@ -691,21 +611,12 @@ msgstr "安裝 title... 完成!"
msgid "Installing wad"
msgstr "安裝 WAD"
msgid "Invalid PIN code"
msgstr "無效的 PIN 碼"
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "請將這些訊息傳送至開發小組以幫助本軟體開發"
msgid "Italian"
msgstr "意大利文"
msgid "Jan"
msgstr "一月"
msgid "Japanese"
msgstr "日文"
msgid "July"
msgstr "七月"
@ -718,9 +629,6 @@ msgstr "保留"
msgid "Keyboard"
msgstr "鍵盤"
msgid "Korean"
msgstr "韓文"
msgid "Language File"
msgstr "語言檔案"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "語言路徑已變更"
msgid "Left"
msgstr "左"
msgid "Like SysMenu"
msgstr "同系統選單"
msgid "Load"
msgstr "載入"
msgid "Load From SD/USB"
msgstr "從 SD/USB 載入"
#, c-format
msgid "Load file from: %s ?"
msgstr "檔案載入位置: %s"
@ -752,6 +651,9 @@ msgstr "檔案載入位置: %s"
msgid "Load this DOL as alternate DOL?"
msgstr "載入這個 DOL 作為替代 DOL?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "正在載入預設語言"
@ -761,17 +663,8 @@ msgstr "正在載入預設音樂"
msgid "Lock Console"
msgstr "鎖定控制台"
msgid "Locked"
msgstr "已鎖定"
msgid "Loop Directory"
msgstr "重複路徑"
msgid "Loop Music"
msgstr "重複音樂"
msgid "Loop Sound"
msgstr "重複音樂"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Mar"
msgstr "三月"
@ -794,15 +687,12 @@ msgstr "音樂循環模式"
msgid "Music Volume"
msgstr "音量"
msgid "Neither"
msgstr "皆不顯示"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "新光碟已檢查"
msgid "Next"
msgstr "往後"
msgid "No"
msgstr "否"
@ -839,12 +729,6 @@ msgstr "沒有可用更新"
msgid "No themes found on the site."
msgstr "在網站上找不到主題"
msgid "None"
msgstr "沒有"
msgid "Normal"
msgstr "一般"
msgid "Not a WAD file."
msgstr "不是 WAD 文件."
@ -884,9 +768,6 @@ msgstr "關閉"
msgid "OK"
msgstr "確定"
msgid "ON"
msgstr "開啟"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "官方網址:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "只顯示自製"
msgid "Only Original"
msgstr "只顯示原始"
msgid "Only for Install"
msgstr "安裝遊戲時"
msgid "Original/Customs"
msgstr "原始/自製"
msgid "Parental Control"
msgstr "親子控制"
msgid "Parental Control disabled"
msgstr "關閉親子控制"
msgid "Partition"
msgstr "磁區"
@ -947,9 +813,6 @@ msgstr "執行次數"
msgid "Play Next"
msgstr "執行下一個"
msgid "Play Once"
msgstr "播放一次"
msgid "Play Previous"
msgstr "執行上一個"
@ -962,9 +825,6 @@ msgstr "請稍候..."
msgid "Power off the Wii"
msgstr "關閉 Wii 主機"
msgid "Prev"
msgstr "往前"
msgid "Prompts Buttons"
msgstr "顯示校正"
@ -974,9 +834,6 @@ msgstr "發布者"
msgid "Quick Boot"
msgstr "快速啟動"
msgid "Random Directory Music"
msgstr "隨機選取音樂"
msgid "Reading WAD data... Ok!"
msgstr "讀取 WAD 數據... 完成!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "返回 Wii 主目錄"
msgid "Right"
msgstr "右"
msgid "Rumble"
msgstr "震動"
msgid "SChinese"
msgstr "簡體中文"
msgid "SFX Volume"
msgstr "音效音量"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "選擇一個 DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "九月"
@ -1085,15 +933,6 @@ msgstr "音效設定"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "音樂+音效"
msgid "Sound+Quiet"
msgstr "音樂+靜音"
msgid "Spanish"
msgstr "西班牙文"
msgid "Special thanks to:"
msgstr "特別感謝"
@ -1121,24 +960,18 @@ msgstr "成功獲取主題."
msgid "Successfully installed:"
msgstr "成功安裝:"
msgid "System Default"
msgstr "系統預設值"
msgid "TChinese"
msgstr "繁體中文"
msgid "TXT Cheatcodes Path"
msgstr "TXT 金手指文件路徑"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "已進入的目錄不存在。你想要創建一個目錄嗎?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "WAD 已安裝,但文件無法從 SD 卡中刪除。"
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "WAD 安裝失敗,錯誤號 %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "佈景主題下載路徑"
@ -1152,6 +985,9 @@ msgstr "佈景主題路徑"
msgid "Theme Title:"
msgstr "佈景主題標題"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "傳輸失敗"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "找不到 USB 設備"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX 被鎖定"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "不能打開剛下載的 WAD 文件 (%s)."
msgid "Uninstall"
msgstr "移除"
@ -1201,15 +1039,12 @@ msgstr "移除 WAD"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgstr "解鎖家長控制"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "解鎖以進行設定"
msgid "Unlocked"
msgstr "已解鎖"
msgid "Unsupported format, try to extract manually."
msgstr "不支援的格式,嘗試手動提取。"
@ -1234,21 +1069,12 @@ msgstr "更新所有語言檔案"
msgid "Update failed"
msgstr "更新失敗"
msgid "Update to"
msgstr "升級至"
msgid "Updating"
msgstr "正在更新"
msgid "Updating Language Files..."
msgstr "正在更新語言檔案..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "正在更新語言檔案:"
msgid "Updating WiiTDB.zip"
msgstr "正在更新 WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "已更新安裝在Homebrew目錄的ZIP檔案"
@ -1280,9 +1106,6 @@ msgstr "更新何者?"
msgid "WiFi Features"
msgstr "WiFi功能設定"
msgid "Widescreen Fix"
msgstr "寬螢幕校正"
msgid "Wii Menu"
msgstr "Wii系統選單"
@ -1310,9 +1133,6 @@ msgstr "是"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr "家長控制已鎖定。如果要解除 Wii 被鎖住的功能,您必須要先至控制台解除家長控制。"
msgid "You need to select or format a partition"
msgstr "選擇你要格式化的磁區"
@ -1377,6 +1197,225 @@ msgstr "的"
msgid "seconds left"
msgstr "剩餘秒數"
#~ msgid "Install 1:1 Copy"
#~ msgstr "安裝用 1:1 複製"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (全年齡)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (7歲以上)"
#~ msgid "1 hour"
#~ msgstr "1 小時"
#~ msgid "10 min"
#~ msgstr "10 分鐘"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (12歲以上)"
#~ msgid "20 min"
#~ msgstr "20 分鐘"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (16歲以上)"
#~ msgid "3 min"
#~ msgstr "3 分鐘"
#~ msgid "30 min"
#~ msgstr "30 分鐘"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (18歲以上成人)"
#~ msgid "5 min"
#~ msgstr "5 分鐘"
#~ msgid "An Error occured"
#~ msgstr "發生一個錯誤"
#~ msgid "Anti"
#~ msgstr "防止"
#~ msgid "Are you sure you want to enable Parent Control?"
#~ msgstr "您確定要啟用家長控制?"
#~ msgid "AutoPatch"
#~ msgstr "自動修改"
#~ msgid "Both"
#~ msgstr "全部"
#~ msgid "Checking for Updates"
#~ msgstr "檢查軟件最新版本"
#~ msgid "Console Default"
#~ msgstr "主機預設值"
#~ msgid "Customs/Original"
#~ msgstr "自製/原始"
#~ msgid "Disc Default"
#~ msgstr "光碟預設"
#~ msgid "DiskFlip"
#~ msgstr "光碟滑動"
#~ msgid "Downloading"
#~ msgstr "正在下載"
#~ msgid "Dutch"
#~ msgstr "荷蘭文"
#~ msgid "English"
#~ msgstr "英文"
#~ msgid "French"
#~ msgstr "法文"
#~ msgid "GAMEID_Gamename"
#~ msgstr "GAMEID_遊戲名稱"
#~ msgid "Game ID"
#~ msgstr "遊戲 ID"
#~ msgid "Game Region"
#~ msgstr "遊戲區碼"
#~ msgid "Gamename [GAMEID]"
#~ msgstr "遊戲名稱 [GAMEID]"
#~ msgid "German"
#~ msgstr "德文"
#~ msgid "Invalid PIN code"
#~ msgstr "無效的 PIN 碼"
#~ msgid "Italian"
#~ msgstr "意大利文"
#~ msgid "Japanese"
#~ msgstr "日文"
#~ msgid "Korean"
#~ msgstr "韓文"
#~ msgid "Left"
#~ msgstr "左"
#~ msgid "Like SysMenu"
#~ msgstr "同系統選單"
#~ msgid "Load From SD/USB"
#~ msgstr "從 SD/USB 載入"
#~ msgid "Locked"
#~ msgstr "已鎖定"
#~ msgid "Loop Directory"
#~ msgstr "重複路徑"
#~ msgid "Loop Music"
#~ msgstr "重複音樂"
#~ msgid "Loop Sound"
#~ msgstr "重複音樂"
#~ msgid "Neither"
#~ msgstr "皆不顯示"
#~ msgid "Next"
#~ msgstr "往後"
#~ msgid "None"
#~ msgstr "沒有"
#~ msgid "Normal"
#~ msgstr "一般"
#~ msgid "ON"
#~ msgstr "開啟"
#~ msgid "Only Customs"
#~ msgstr "只顯示自製"
#~ msgid "Only Original"
#~ msgstr "只顯示原始"
#~ msgid "Only for Install"
#~ msgstr "安裝遊戲時"
#~ msgid "Original/Customs"
#~ msgstr "原始/自製"
#~ msgid "Parental Control disabled"
#~ msgstr "關閉親子控制"
#~ msgid "Play Once"
#~ msgstr "播放一次"
#~ msgid "Prev"
#~ msgstr "往前"
#~ msgid "Random Directory Music"
#~ msgstr "隨機選取音樂"
#~ msgid "Right"
#~ msgstr "右"
#~ msgid "SChinese"
#~ msgstr "簡體中文"
#~ msgid "Sound+BGM"
#~ msgstr "音樂+音效"
#~ msgid "Sound+Quiet"
#~ msgstr "音樂+靜音"
#~ msgid "Spanish"
#~ msgstr "西班牙文"
#~ msgid "System Default"
#~ msgstr "系統預設值"
#~ msgid "TChinese"
#~ msgstr "繁體中文"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "WAD 已安裝,但文件無法從 SD 卡中刪除。"
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "WAD 安裝失敗,錯誤號 %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "不能打開剛下載的 WAD 文件 (%s)."
#~ msgid "Unlock Parental Control"
#~ msgstr "解鎖家長控制"
#~ msgid "Unlocked"
#~ msgstr "已解鎖"
#~ msgid "Update to"
#~ msgstr "升級至"
#~ msgid "Updating"
#~ msgstr "正在更新"
#~ msgid "Updating Language Files..."
#~ msgstr "正在更新語言檔案..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "正在更新 WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "寬螢幕校正"
#~ msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
#~ msgstr "家長控制已鎖定。如果要解除 Wii 被鎖住的功能,您必須要先至控制台解除家長控制。"
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s 可能無法正確啟動,也許您的系統目錄不是最新的。"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: Nitro_subzero \n"
"Language-Team: Nitro_subzero\n"
@ -25,54 +25,15 @@ msgstr " ถูกบันทึกแล้ว ข้อความยัง
msgid " is not on the server."
msgstr " ไม่อยู่บนแม่ข่าย"
msgid "0 (Everyone)"
msgstr "0 (ทุกคน)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (เด็ก 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 ชม."
msgid "10 min"
msgstr "10 นาที"
msgid "2 (Teen 12+)"
msgstr "2 (วัยรุ่น 12+)"
msgid "20 min"
msgstr "20 นาที"
msgid "2D Cover Path"
msgstr "ที่เก็บ ปก 2D"
msgid "3 (Mature 16+)"
msgstr "3 (เต็มวัย 16+)"
msgid "3 min"
msgstr "3 นาที"
msgid "30 min"
msgstr "30 นาที"
msgid "3D Cover Path"
msgstr "ที่เก็บ ปก 3D"
msgid "3D Covers"
msgstr "หน้าปก 3D"
msgid "4 (Adults Only 18+)"
msgstr "4 (เฉพาะผู้ใหญ่ 18+)"
msgid "5 min"
msgstr "5 นาที"
msgid ">> Deleting tickets..."
msgstr ">> ลบ Tickets..."
@ -136,19 +97,13 @@ msgstr "ความสามารถทั้งหมดของ USB Loader
msgid "Alternate DOL"
msgstr "เปลี่ยน DOL "
msgid "An Error occured"
msgstr "พบความผิดพลาด"
msgid "Anti"
msgstr "ต้าน"
msgid "App Language"
msgstr "ภาษาของโปรแกรม"
msgid "Apr"
msgstr "เมษ."
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr "ผู้แต่ง:"
msgid "AutoInit Network"
msgstr "ทำการเชื่อมต่อเครือข่าย"
msgid "AutoPatch"
msgstr "แก้ไขอัตโนมัติ"
msgid "BCA Codes Path"
msgstr ""
@ -199,9 +151,6 @@ msgstr "บูต/มาตราฐาน"
msgid "Boot?"
msgstr "บูต?"
msgid "Both"
msgstr "ทั้งคู่"
msgid "Can't be formatted"
msgstr "ไม่สามารถฟอร์แมตได้"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "ไฟล์สูตรโกง ว่างเปล่า"
msgid "Checking for Updates"
msgstr "ตรวจสอบหาอัพเดท"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "คอนโซล"
msgid "Console Default"
msgstr "ค่าตั้งต้นของคอนโซล"
msgid "Console Locked"
msgstr "คอนโซลถูกล๊อค"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "ไม่สามารถสร้างไฟล์ GCT"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "เครดิต"
msgid "Custom Paths"
msgstr "กำหนด ที่เก็บ"
msgid "Customs/Original"
msgstr "กำหนดเอง/ดั้งเดิม"
msgid "DOL Path"
msgstr "ที่เก็บ DOL"
@ -365,15 +309,9 @@ msgstr "ดาวน์โหลดภาพแผ่น"
msgid "Disc Artwork Path"
msgstr "ที่เก็บ ภาพแผ่น"
msgid "Disc Default"
msgstr "ค่าตั้งต้นแผ่น"
msgid "Disc Images"
msgstr "ภาพแผ่น"
msgid "DiskFlip"
msgstr "สลับด้านแผ่น"
msgid "Display"
msgstr "การแสดงผล"
@ -404,6 +342,9 @@ msgstr "ต้องการดาวน์โหลดธีมนี้ ?"
msgid "Do you want to format:"
msgstr "ต้องการฟอร์แมต:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "ต้องการจะใช้ alt DOL เฉพาะที่รู้ว่าถูกต้อง?"
@ -434,26 +375,26 @@ msgstr "ดาวน์โหลดเสร็จแล้ว"
msgid "Download request failed."
msgstr "ดาวน์โหลดไม่ได้"
msgid "Downloading"
msgstr "กำลังดาวน์โหลด"
msgid "Downloading Page List:"
msgstr "รายการที่กำลังดาวน์โหลด:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "กำลังดาวน์โหลดไฟล์:"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "ภาพที่กำลังดาวน์โหลด:"
msgid "Dutch"
msgstr "เนเธอร์แลนด์"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "ผิดพลาด"
@ -464,9 +405,6 @@ msgstr "ผิดพลาด:"
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr "อังกฤษ"
msgid "Error"
msgstr "ผิดพลาด"
@ -476,15 +414,24 @@ msgstr "ผิดพลาด !"
msgid "Error 002 fix"
msgstr "แก้ไข Error002"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "อ่านแผ่นไม่ได้"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "ผิดพลาดขณะรับส่งข้อมูล"
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "ขยายไฟล์ไม่ได้"
msgid "Failed to open partition"
msgstr "ไม่สามารถเข้าถึงพาร์ทิชั่นได้"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "กพ."
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "กลับ-X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "ฟอร์แมต"
@ -545,15 +486,9 @@ msgstr "กำลังฟอร์แมต,รอสักครู่..."
msgid "Free Space"
msgstr "พื้นที่ว่าง"
msgid "French"
msgstr "ฝรั่งเศส"
msgid "Full Shutdown"
msgstr "ปิดอย่างสมบรูณ์"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "ที่เก็บ สูตรโกง"
@ -566,9 +501,6 @@ msgstr "ปรับแต่งหน้าจอ"
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr "เกมส์ ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "โหลดเกมส์"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "โซนของเกมส์"
msgid "Game Size"
msgstr "ขนาดของเกมส์"
@ -599,18 +528,12 @@ msgstr "เกมส์นี้ถูกติดตั้งอยู่แล
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "เกมส์"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "เยอรมัน"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "ใส่ SD card เพื่อใช้ตัวเลือกนี
msgid "Install"
msgstr "ติดตั้ง"
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr "ผิดพลาดขณะติดตั้ง!"
@ -691,21 +611,12 @@ msgstr "ติดตั้ง Title... สำเร็จ!"
msgid "Installing wad"
msgstr "ติดตั้ง WAD"
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "ดูเหมือนว่าคุณมีข้อมูลที่จำเป็นต่อการพัฒนาโปรแกรม กรุณาส่งข้อมูลนั้นให้ทีมพัฒนาด้วย."
msgid "Italian"
msgstr "อิตาลี"
msgid "Jan"
msgstr "มค."
msgid "Japanese"
msgstr "ญี่ปุ่น"
msgid "July"
msgstr "กค."
@ -718,9 +629,6 @@ msgstr "เก็บ"
msgid "Keyboard"
msgstr "แป้นพิมพ์"
msgid "Korean"
msgstr "เกาหลี"
msgid "Language File"
msgstr "ไฟล์ภาษา"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "ที่เก็บไฟล์ภาษาถูกเปลี่ยนแปลง"
msgid "Left"
msgstr "ซ้าย"
msgid "Like SysMenu"
msgstr "คล้าย SysMenu"
msgid "Load"
msgstr "โหลด"
msgid "Load From SD/USB"
msgstr "โหลดจาก SD/USB"
#, c-format
msgid "Load file from: %s ?"
msgstr "โหลดไฟล์จาก: %s ?"
@ -752,6 +651,9 @@ msgstr "โหลดไฟล์จาก: %s ?"
msgid "Load this DOL as alternate DOL?"
msgstr "โหลด DOL นี้เป็น alternate DOL?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "โหลดภาษามาตราฐาน."
@ -761,18 +663,9 @@ msgstr "โหลดเพลงมาตราฐาน"
msgid "Lock Console"
msgstr "ล๊อค Console"
msgid "Locked"
msgstr "ล๊อค"
msgid "Loop Directory"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgstr "เล่นเสียงซ้ำ"
msgid "Mar"
msgstr "มีค."
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "ความดังเสียงเพลง"
msgid "Neither"
msgstr "ไม่ทั้งสอง"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "พบแผ่นเกมส์ใหม่"
msgid "Next"
msgstr "ต่อไป"
msgid "No"
msgstr "ไม่"
@ -839,12 +729,6 @@ msgstr "ไม่มีไฟล์ Update ตัวใหม่"
msgid "No themes found on the site."
msgstr "ไม่พบธีมบนเวบไซต์"
msgid "None"
msgstr ""
msgid "Normal"
msgstr "ปกติ"
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "ปิด"
msgid "OK"
msgstr "ตกลง"
msgid "ON"
msgstr "เปิด"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "เวบไซต์อย่างเป็นทางการ:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "เฉพาะที่ดัดแปลง"
msgid "Only Original"
msgstr "เฉพาะของแท้"
msgid "Only for Install"
msgstr "เฉพาะติดตั้งเท่านั้น"
msgid "Original/Customs"
msgstr "ของแท้/ดัดแปลง"
msgid "Parental Control"
msgstr "กำหนดอายุ"
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr "พาร์ติชั่น"
@ -947,9 +813,6 @@ msgstr "จำนวนที่เล่น"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "รอสักครู่"
msgid "Power off the Wii"
msgstr "ปิดเครื่อง Wii"
msgid "Prev"
msgstr "ที่ผ่านมา"
msgid "Prompts Buttons"
msgstr "ปุ่มเตรียมตัว"
@ -974,9 +834,6 @@ msgstr "เผยแพร่โดย"
msgid "Quick Boot"
msgstr "บูตแบบเร็ว"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "อ่านข้อมูล WAD... สำเร็จ!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "กลับไปที่เมนู Wii"
msgid "Right"
msgstr "ขวา"
msgid "Rumble"
msgstr "สั่น"
msgid "SChinese"
msgstr "จีน"
msgid "SFX Volume"
msgstr "ความดังของ SFX"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "เลือก DOL"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "กย."
@ -1085,15 +933,6 @@ msgstr "เสียง"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "เสียง+BGM"
msgid "Sound+Quiet"
msgstr "เสียง+เงียบ"
msgid "Spanish"
msgstr "สเปน"
msgid "Special thanks to:"
msgstr "ขอขอบคุณอย่างสูง:"
@ -1121,24 +960,18 @@ msgstr "ขยายไฟล์ธีมสำเร็จ."
msgid "Successfully installed:"
msgstr "ติดตั้งสำเร็จ:"
msgid "System Default"
msgstr "ค่าเริ่มต้นของระบบ"
msgid "TChinese"
msgstr "จีนโบราณ"
msgid "TXT Cheatcodes Path"
msgstr "ที่เก็บ TXTCheatcodes"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "ไม่พบไดเรคทอรี่นี้ ต้องการสร้างใหม่รึไม่ ?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "ไฟล์ Wad ถูกติดตั้งแล้ว แต่ไม่สามารถลบจาก SD card ได้"
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "การติดตั้งไฟล์ Wad ล้มเหลวด้วยข้อผิดพลาด %ld"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "ตำแหน่งที่ดาวน์โหลดธีม"
@ -1152,6 +985,9 @@ msgstr "ที่อยู่ Theme"
msgid "Theme Title:"
msgstr "ชื่อธีม:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "ถ่ายโอนไม่ได้"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "ไม่พบอุปกรณ์ USB"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX 5 ถูกป้องกัน"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "ไม่สามารถเปิดไฟล์ Wad ที่เพิ่งดาวน์โหลดมาได้ (%s)."
msgid "Uninstall"
msgstr "ถอนการติดตั้ง"
@ -1201,15 +1039,12 @@ msgstr "ถอนการติดตั้ง wad"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "ปลดล๊อค Console ก่อน เพื่อใช้ตัวเลือกนี้"
msgid "Unlocked"
msgstr "ปลดล๊อค"
msgid "Unsupported format, try to extract manually."
msgstr "ไม่สนับสนุนไฟล์นี้ ลองขยายไฟล์เอง"
@ -1234,21 +1069,12 @@ msgstr "อัพเดทภาษาทั้งหมด"
msgid "Update failed"
msgstr "อัพเดทล้มเหลว"
msgid "Update to"
msgstr "อัพเดทเป็น"
msgid "Updating"
msgstr "กำลังอัพเดท"
msgid "Updating Language Files..."
msgstr "กำลังอัพเดทไฟล์ภาษา..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "กำลังอัพเดทไฟล์ภาษา:"
msgid "Updating WiiTDB.zip"
msgstr "กำลังอัพเดทไฟล์ WiiTDB.zip"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "อัพโหลดไฟล์ zip ไปที่ไดเรคทอรี่ homebrew"
@ -1280,9 +1106,6 @@ msgstr "คุณต้องการอัพเดทอะไร ?"
msgid "WiFi Features"
msgstr "ความสามารถของ Wi Fi"
msgid "Widescreen Fix"
msgstr "จอกว้าง"
msgid "Wii Menu"
msgstr "เมนู Wii"
@ -1310,9 +1133,6 @@ msgstr "ใช่"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr ""
@ -1377,6 +1197,186 @@ msgstr "จาก"
msgid "seconds left"
msgstr "วินาทีที่เหลือ"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (ทุกคน)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (เด็ก 7+)"
#~ msgid "1 hour"
#~ msgstr "1 ชม."
#~ msgid "10 min"
#~ msgstr "10 นาที"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (วัยรุ่น 12+)"
#~ msgid "20 min"
#~ msgstr "20 นาที"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (เต็มวัย 16+)"
#~ msgid "3 min"
#~ msgstr "3 นาที"
#~ msgid "30 min"
#~ msgstr "30 นาที"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (เฉพาะผู้ใหญ่ 18+)"
#~ msgid "5 min"
#~ msgstr "5 นาที"
#~ msgid "An Error occured"
#~ msgstr "พบความผิดพลาด"
#~ msgid "Anti"
#~ msgstr "ต้าน"
#~ msgid "AutoPatch"
#~ msgstr "แก้ไขอัตโนมัติ"
#~ msgid "Both"
#~ msgstr "ทั้งคู่"
#~ msgid "Checking for Updates"
#~ msgstr "ตรวจสอบหาอัพเดท"
#~ msgid "Console Default"
#~ msgstr "ค่าตั้งต้นของคอนโซล"
#~ msgid "Customs/Original"
#~ msgstr "กำหนดเอง/ดั้งเดิม"
#~ msgid "Disc Default"
#~ msgstr "ค่าตั้งต้นแผ่น"
#~ msgid "DiskFlip"
#~ msgstr "สลับด้านแผ่น"
#~ msgid "Downloading"
#~ msgstr "กำลังดาวน์โหลด"
#~ msgid "Dutch"
#~ msgstr "เนเธอร์แลนด์"
#~ msgid "English"
#~ msgstr "อังกฤษ"
#~ msgid "French"
#~ msgstr "ฝรั่งเศส"
#~ msgid "Game ID"
#~ msgstr "เกมส์ ID"
#~ msgid "Game Region"
#~ msgstr "โซนของเกมส์"
#~ msgid "German"
#~ msgstr "เยอรมัน"
#~ msgid "Italian"
#~ msgstr "อิตาลี"
#~ msgid "Japanese"
#~ msgstr "ญี่ปุ่น"
#~ msgid "Korean"
#~ msgstr "เกาหลี"
#~ msgid "Left"
#~ msgstr "ซ้าย"
#~ msgid "Like SysMenu"
#~ msgstr "คล้าย SysMenu"
#~ msgid "Load From SD/USB"
#~ msgstr "โหลดจาก SD/USB"
#~ msgid "Locked"
#~ msgstr "ล๊อค"
#~ msgid "Loop Sound"
#~ msgstr "เล่นเสียงซ้ำ"
#~ msgid "Neither"
#~ msgstr "ไม่ทั้งสอง"
#~ msgid "Next"
#~ msgstr "ต่อไป"
#~ msgid "Normal"
#~ msgstr "ปกติ"
#~ msgid "ON"
#~ msgstr "เปิด"
#~ msgid "Only Customs"
#~ msgstr "เฉพาะที่ดัดแปลง"
#~ msgid "Only Original"
#~ msgstr "เฉพาะของแท้"
#~ msgid "Only for Install"
#~ msgstr "เฉพาะติดตั้งเท่านั้น"
#~ msgid "Original/Customs"
#~ msgstr "ของแท้/ดัดแปลง"
#~ msgid "Prev"
#~ msgstr "ที่ผ่านมา"
#~ msgid "Right"
#~ msgstr "ขวา"
#~ msgid "SChinese"
#~ msgstr "จีน"
#~ msgid "Sound+BGM"
#~ msgstr "เสียง+BGM"
#~ msgid "Sound+Quiet"
#~ msgstr "เสียง+เงียบ"
#~ msgid "Spanish"
#~ msgstr "สเปน"
#~ msgid "System Default"
#~ msgstr "ค่าเริ่มต้นของระบบ"
#~ msgid "TChinese"
#~ msgstr "จีนโบราณ"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "ไฟล์ Wad ถูกติดตั้งแล้ว แต่ไม่สามารถลบจาก SD card ได้"
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "การติดตั้งไฟล์ Wad ล้มเหลวด้วยข้อผิดพลาด %ld"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "ไม่สามารถเปิดไฟล์ Wad ที่เพิ่งดาวน์โหลดมาได้ (%s)."
#~ msgid "Unlocked"
#~ msgstr "ปลดล๊อค"
#~ msgid "Update to"
#~ msgstr "อัพเดทเป็น"
#~ msgid "Updating"
#~ msgstr "กำลังอัพเดท"
#~ msgid "Updating Language Files..."
#~ msgstr "กำลังอัพเดทไฟล์ภาษา..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "กำลังอัพเดทไฟล์ WiiTDB.zip"
#~ msgid "Widescreen Fix"
#~ msgstr "จอกว้าง"
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s : %s อาจทำงานผิดปกติ ถ้าระบบของคุณไม่ทันสมัย"

View File

@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-17 18:50+0100\n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"Last-Translator: omercigingelini\n"
"Language-Team: omercigingelini\n"
@ -25,54 +25,15 @@ msgstr " kaydedildi. Metin doğrulanmadı. Bazı kodlar birlikteyken doğru çal
msgid " is not on the server."
msgstr " sunucuda mevcut değil"
msgid "0 (Everyone)"
msgstr "0 (Herkes)"
msgid "0 (Locked and Unlocked Games)"
msgstr ""
msgid "1 (Child 7+)"
msgstr "1 (Çocuk 7+)"
msgid "1 (Unlocked Games Only)"
msgstr ""
msgid "1 hour"
msgstr "1 saat"
msgid "10 min"
msgstr "10 dakika"
msgid "2 (Teen 12+)"
msgstr "2 (Genç 12+)"
msgid "20 min"
msgstr "20 dakika"
msgid "2D Cover Path"
msgstr "2D Kapak Yolu"
msgid "3 (Mature 16+)"
msgstr "3 (Yetişkin 16+)"
msgid "3 min"
msgstr "3 dakika"
msgid "30 min"
msgstr "30 dakika"
msgid "3D Cover Path"
msgstr "3D Kapak Yolu"
msgid "3D Covers"
msgstr "3B Kapaklar"
msgid "4 (Adults Only 18+)"
msgstr "4 (Sadece Yetişkin 18+)"
msgid "5 min"
msgstr "5 dakika"
msgid ">> Deleting tickets..."
msgstr ">> Biletler siliniyor"
@ -136,19 +97,13 @@ msgstr "USB Loader GX'in tüm özellikleri kilitli."
msgid "Alternate DOL"
msgstr "Alternatif DOL"
msgid "An Error occured"
msgstr "Bir Hata oluştu"
msgid "Anti"
msgstr ""
msgid "App Language"
msgstr "Program Lisani"
msgid "Apr"
msgstr "Nis"
msgid "Are you sure you want to enable Parent Control?"
msgid "Are you sure you want to lock USB Loader GX?"
msgstr ""
msgid "Are you sure you want to reset?"
@ -166,9 +121,6 @@ msgstr "Yazar:"
msgid "AutoInit Network"
msgstr "Ağı ototanımla"
msgid "AutoPatch"
msgstr "OtoYama"
msgid "BCA Codes Path"
msgstr "BCA Kod Yolu"
@ -199,9 +151,6 @@ msgstr "Boot/Standart"
msgid "Boot?"
msgstr "Başlat?"
msgid "Both"
msgstr "İkisi de"
msgid "Can't be formatted"
msgstr "Biçimlendirilemiyor"
@ -226,9 +175,6 @@ msgstr ""
msgid "Cheatfile is blank"
msgstr "Hile dosyası boş"
msgid "Checking for Updates"
msgstr "Güncellemeler kontrol ediliyor"
msgid "Clear"
msgstr ""
@ -260,9 +206,6 @@ msgstr ""
msgid "Console"
msgstr "Konsol"
msgid "Console Default"
msgstr "Konsol Ayari"
msgid "Console Locked"
msgstr "Konsol Kilitli"
@ -284,6 +227,10 @@ msgstr ""
msgid "Could not create GCT file"
msgstr "GCT dosyası oluşturulamadı"
#, c-format
msgid "Could not create path: %s"
msgstr ""
msgid "Could not find info for this game in the wiitdb.xml."
msgstr ""
@ -314,9 +261,6 @@ msgstr "Emekçiler"
msgid "Custom Paths"
msgstr "Kişisel Yollar"
msgid "Customs/Original"
msgstr "Kişisel/Orjinal"
msgid "DOL Path"
msgstr "DOL Yolu"
@ -365,15 +309,9 @@ msgstr "Disk Görseli Indirme"
msgid "Disc Artwork Path"
msgstr "Disk Görsel Yolu"
msgid "Disc Default"
msgstr "Disk Varsayılanı"
msgid "Disc Images"
msgstr "Disk Resimleri"
msgid "DiskFlip"
msgstr "DiskÇevir"
msgid "Display"
msgstr "Görüntü"
@ -404,6 +342,9 @@ msgstr "Bu temayı indirmek istiyor musunuz?"
msgid "Do you want to format:"
msgstr "Formatlamak istiyor musunuz:"
msgid "Do you want to load this theme?"
msgstr ""
msgid "Do you want to use the alternate DOL that is known to be correct?"
msgstr "Doğru olduğu bilinen alternatif DOL ü kullanmak ister misiniz?"
@ -434,26 +375,26 @@ msgstr "Indirme tamamlandı"
msgid "Download request failed."
msgstr "İndirme isteği başarısız"
msgid "Downloading"
msgstr "Indiriliyor"
msgid "Downloading Page List:"
msgstr "İndirilen Sayfa Listesi:"
msgid "Downloading covers"
msgstr ""
msgid "Downloading custom Discarts"
msgstr ""
msgid "Downloading file"
msgstr "Indirilen dosya"
msgid "Downloading file..."
msgstr ""
msgid "Downloading files"
msgstr ""
msgid "Downloading image:"
msgstr "İndirilen resim:"
msgid "Dutch"
msgstr "Flaman"
msgid "Downloading original Discarts"
msgstr ""
msgid "ERROR"
msgstr "HATA"
@ -464,9 +405,6 @@ msgstr "HATA:"
msgid "ERROR: Can't set up theme."
msgstr ""
msgid "English"
msgstr "Ingilizce"
msgid "Error"
msgstr "Hata"
@ -476,15 +414,24 @@ msgstr "Hata !"
msgid "Error 002 fix"
msgstr "Error 002 düzeltmesi"
msgid "Error opening downloaded file"
msgstr ""
msgid "Error reading Disc"
msgstr "Disk Okuma Hatası"
msgid "Error while downloding file"
msgstr ""
msgid "Error while opening the zip."
msgstr ""
msgid "Error while transfering data."
msgstr "Veri iletiminde hata."
msgid "Error while updating USB Loader GX."
msgstr ""
msgid "Error writing the data."
msgstr ""
@ -509,6 +456,9 @@ msgstr "Çıkartma başarısız"
msgid "Failed to open partition"
msgstr "Bölüm açılamadı"
msgid "Failed updating"
msgstr ""
msgid "Feb"
msgstr "Şub"
@ -527,15 +477,6 @@ msgstr ""
msgid "Flip-X"
msgstr "Çevir-X"
msgid "Force NTSC"
msgstr ""
msgid "Force PAL50"
msgstr ""
msgid "Force PAL60"
msgstr ""
msgid "Format"
msgstr "Biçimlendir"
@ -545,15 +486,9 @@ msgstr "Biçimlendiriliyor, bekleyiniz..."
msgid "Free Space"
msgstr "Boş Yer"
msgid "French"
msgstr "Fransızca"
msgid "Full Shutdown"
msgstr "Tam Kapama"
msgid "GAMEID_Gamename"
msgstr ""
msgid "GCT Cheatcodes Path"
msgstr "GCT Hile Yolu"
@ -566,9 +501,6 @@ msgstr "GUI Ayarları"
msgid "GXtheme.cfg not found in any subfolder."
msgstr ""
msgid "Game ID"
msgstr "Oyun ID"
msgid "Game IOS"
msgstr ""
@ -581,9 +513,6 @@ msgstr "Oyun Yükle"
msgid "Game Lock"
msgstr ""
msgid "Game Region"
msgstr "Oyun Bölgesi"
msgid "Game Size"
msgstr "Oyun Boyutu"
@ -599,18 +528,12 @@ msgstr "Oyun zaten kurulu:"
msgid "Game partition"
msgstr ""
msgid "Gamename [GAMEID]"
msgstr ""
msgid "Games"
msgstr "Oyunlar"
msgid "GamesLevel"
msgstr ""
msgid "German"
msgstr "Almanca"
msgid "Gerne:"
msgstr ""
@ -664,9 +587,6 @@ msgstr "Bu seçeneği kullanmak için SD takın."
msgid "Install"
msgstr "Kur"
msgid "Install 1:1 Copy"
msgstr ""
msgid "Install Error!"
msgstr "Kurulum Hatasi!"
@ -691,21 +611,12 @@ msgstr "Başlık kuruluyor.. OK!"
msgid "Installing wad"
msgstr "Wad kuruluyor"
msgid "Invalid PIN code"
msgstr ""
msgid "It seems that you have some information that will be helpful to us. Please pass this information along to the DEV team."
msgstr "İşimize yarabilecek bilgilere sahip gibi gözüküyorsunuz. Lütfen bu bilgiyi Geliştirme takımına iletin."
msgid "Italian"
msgstr "Italyanca"
msgid "Jan"
msgstr "Oca"
msgid "Japanese"
msgstr "Japonca"
msgid "July"
msgstr "Tem"
@ -718,9 +629,6 @@ msgstr "Sakla"
msgid "Keyboard"
msgstr "Klavye"
msgid "Korean"
msgstr "Korece"
msgid "Language File"
msgstr "Dil dosyası"
@ -733,18 +641,9 @@ msgstr ""
msgid "Languagepath changed."
msgstr "Dil dosya yolu değişti."
msgid "Left"
msgstr "Sol"
msgid "Like SysMenu"
msgstr "Sistem Menüsü Gibi"
msgid "Load"
msgstr "Yükle"
msgid "Load From SD/USB"
msgstr "SD/USB den yükle"
#, c-format
msgid "Load file from: %s ?"
msgstr "Dosya %s 'ten yüklensin mi?"
@ -752,6 +651,9 @@ msgstr "Dosya %s 'ten yüklensin mi?"
msgid "Load this DOL as alternate DOL?"
msgstr "Bu DOL alternatif DOL olarak mı yüklensin?"
msgid "Loading default theme."
msgstr ""
msgid "Loading standard language."
msgstr "Standart dil yükleniyor."
@ -761,18 +663,9 @@ msgstr "Standart müzik yükleniyor."
msgid "Lock Console"
msgstr "Konsolu Kilitle"
msgid "Locked"
msgstr "Kilitlendi"
msgid "Loop Directory"
msgid "Lock USB Loader GX"
msgstr ""
msgid "Loop Music"
msgstr ""
msgid "Loop Sound"
msgstr "Döngüdeki Ses"
msgid "Mar"
msgstr ""
@ -794,15 +687,12 @@ msgstr ""
msgid "Music Volume"
msgstr "Ses Seviyesi"
msgid "Neither"
msgstr "Hiçbiri"
msgid "Network is not initiated."
msgstr ""
msgid "New Disc Detected"
msgstr "Yeni Disk Bulundu"
msgid "Next"
msgstr "Ileri"
msgid "No"
msgstr "Hayır"
@ -839,12 +729,6 @@ msgstr "Güncelleme yok"
msgid "No themes found on the site."
msgstr "Bu sitede tema bulunamadı"
msgid "None"
msgstr ""
msgid "Normal"
msgstr ""
msgid "Not a WAD file."
msgstr ""
@ -884,9 +768,6 @@ msgstr "KAPALI"
msgid "OK"
msgstr ""
msgid "ON"
msgstr "AÇIK"
msgid "Ocarina"
msgstr ""
@ -899,24 +780,9 @@ msgstr "Resmi Site:"
msgid "Offset"
msgstr ""
msgid "Only Customs"
msgstr "Sadece Kişiseller"
msgid "Only Original"
msgstr "Sadece Orjinal"
msgid "Only for Install"
msgstr "Sadece Kurulum için"
msgid "Original/Customs"
msgstr "Orjinal/Kişisel"
msgid "Parental Control"
msgstr "Ebeveyn kontrolü"
msgid "Parental Control disabled"
msgstr ""
msgid "Partition"
msgstr "Bölüm"
@ -947,9 +813,6 @@ msgstr "Oynama Sayısı"
msgid "Play Next"
msgstr ""
msgid "Play Once"
msgstr ""
msgid "Play Previous"
msgstr ""
@ -962,9 +825,6 @@ msgstr "Lütfen bekleyin.."
msgid "Power off the Wii"
msgstr "Wii'yi kapat"
msgid "Prev"
msgstr "Önceki"
msgid "Prompts Buttons"
msgstr "Hız ve Butonlar"
@ -974,9 +834,6 @@ msgstr "Yayıncı"
msgid "Quick Boot"
msgstr "Hızlı Başlatma"
msgid "Random Directory Music"
msgstr ""
msgid "Reading WAD data... Ok!"
msgstr "Wad verisi okunuyor..OK!"
@ -1016,15 +873,9 @@ msgstr ""
msgid "Return to Wii Menu"
msgstr "Wii Menü ye Dön"
msgid "Right"
msgstr "Sağ"
msgid "Rumble"
msgstr "Titreşim"
msgid "SChinese"
msgstr "Basitleştirilmis Çince"
msgid "SFX Volume"
msgstr "Efekt Seviyesi"
@ -1052,9 +903,6 @@ msgstr ""
msgid "Select a DOL"
msgstr "Bir DOL seç"
msgid "Select a DOL from Game"
msgstr ""
msgid "Sept"
msgstr "Eyl"
@ -1085,15 +933,6 @@ msgstr "Ses"
msgid "Sound Settings"
msgstr ""
msgid "Sound+BGM"
msgstr "Ses+BGM"
msgid "Sound+Quiet"
msgstr "Ses+Quiet"
msgid "Spanish"
msgstr "Ispanyolca"
msgid "Special thanks to:"
msgstr "Özel tesekkürler"
@ -1121,24 +960,18 @@ msgstr "Tema başarıyla çıkarıldı."
msgid "Successfully installed:"
msgstr "Başarıyla kuruldu:"
msgid "System Default"
msgstr "Sistem Varsayılanı"
msgid "TChinese"
msgstr "Geleneksel Çince"
msgid "TXT Cheatcodes Path"
msgstr "TXT Hile Yolu"
msgid "The entered directory does not exist. Would you like to create it?"
msgstr "Girilen klasör mevcut değil. Oluşturmak ister misin?"
msgid "The wad file was installed. But It could not be deleted from the SD card."
msgstr "Wad dosyası kuruldu. Fakat SD den silinemedi"
msgid "The wad file was installed"
msgstr ""
#, c-format
msgid "The wad installation failed with error %ld"
msgstr "Wad kurulumu %ld hatasıyla başarısız oldu"
msgid "The wad installation failed with error %i"
msgstr ""
msgid "Theme Download Path"
msgstr "Tema İndirme Yolu"
@ -1152,6 +985,9 @@ msgstr "Tema Yolu"
msgid "Theme Title:"
msgstr "Tema Başlığı:"
msgid "Theme path is changed."
msgstr ""
msgid "This IOS is the BootMii ios. If you are sure it is not BootMii and you have something else installed there than ignore this warning."
msgstr ""
@ -1176,16 +1012,18 @@ msgstr ""
msgid "Transfer failed."
msgstr "Transfer başarısız"
msgid "Trying custom Discarts"
msgstr ""
msgid "Trying original Discarts"
msgstr ""
msgid "USB Device not found"
msgstr "USB Aygıtı bulunamadı"
msgid "USB Loader GX is protected"
msgstr "USB Loader GX koruma altında"
#, c-format
msgid "Unable to open the wad that was just downloaded (%s)."
msgstr "Az önce indirilen wad açılamıyor(%s)"
msgid "Uninstall"
msgstr "Kaldır"
@ -1201,15 +1039,12 @@ msgstr "Wad Kaldırılıyor"
msgid "Unknown"
msgstr ""
msgid "Unlock Parental Control"
msgid "Unlock USB Loader GX"
msgstr ""
msgid "Unlock console to use this option."
msgstr "Bu seçeneği kullanmak için konsol kilidini açın"
msgid "Unlocked"
msgstr "Kilit açıldı"
msgid "Unsupported format, try to extract manually."
msgstr "Desteklenmeyen format,elle çıkartmayı deneyin"
@ -1234,21 +1069,12 @@ msgstr "Tüm Dil Dosyalarını Güncelle"
msgid "Update failed"
msgstr "Güncelleme başarısız"
msgid "Update to"
msgstr "Güncellenecek"
msgid "Updating"
msgstr "Güncelleniyor"
msgid "Updating Language Files..."
msgstr "Dil Dosyaları Güncelleniyor..."
msgid "Update successfull"
msgstr ""
msgid "Updating Language Files:"
msgstr "Güncellenen Dil Dosyaları:"
msgid "Updating WiiTDB.zip"
msgstr "WiiTDB.zip güncelleniyor"
msgid "Uploaded ZIP file installed to homebrew directory."
msgstr "ZIp dosyası homebrew klasörüne kuruldu"
@ -1280,9 +1106,6 @@ msgstr "Neyi güncelleme istiyorsun?"
msgid "WiFi Features"
msgstr "WiFi Özellikleri"
msgid "Widescreen Fix"
msgstr "Genişekran Çözümü"
msgid "Wii Menu"
msgstr "Wii Menü"
@ -1310,9 +1133,6 @@ msgstr "Evet"
msgid "You are trying to select a FAT32/NTFS/EXT partition with cIOS 249 Rev < 18. This is not supported. Continue on your own risk."
msgstr ""
msgid "You don't have Parental Control enabled. If you wish to use Parental Control, enable it in the Wii Settings."
msgstr ""
msgid "You need to select or format a partition"
msgstr "Bir bölüm seçmeniz ya da formatlamanız gerekiyor"
@ -1377,6 +1197,180 @@ msgstr "./"
msgid "seconds left"
msgstr "saniye kaldı"
#~ msgid "0 (Everyone)"
#~ msgstr "0 (Herkes)"
#~ msgid "1 (Child 7+)"
#~ msgstr "1 (Çocuk 7+)"
#~ msgid "1 hour"
#~ msgstr "1 saat"
#~ msgid "10 min"
#~ msgstr "10 dakika"
#~ msgid "2 (Teen 12+)"
#~ msgstr "2 (Genç 12+)"
#~ msgid "20 min"
#~ msgstr "20 dakika"
#~ msgid "3 (Mature 16+)"
#~ msgstr "3 (Yetişkin 16+)"
#~ msgid "3 min"
#~ msgstr "3 dakika"
#~ msgid "30 min"
#~ msgstr "30 dakika"
#~ msgid "4 (Adults Only 18+)"
#~ msgstr "4 (Sadece Yetişkin 18+)"
#~ msgid "5 min"
#~ msgstr "5 dakika"
#~ msgid "An Error occured"
#~ msgstr "Bir Hata oluştu"
#~ msgid "AutoPatch"
#~ msgstr "OtoYama"
#~ msgid "Both"
#~ msgstr "İkisi de"
#~ msgid "Checking for Updates"
#~ msgstr "Güncellemeler kontrol ediliyor"
#~ msgid "Console Default"
#~ msgstr "Konsol Ayari"
#~ msgid "Customs/Original"
#~ msgstr "Kişisel/Orjinal"
#~ msgid "Disc Default"
#~ msgstr "Disk Varsayılanı"
#~ msgid "DiskFlip"
#~ msgstr "DiskÇevir"
#~ msgid "Downloading"
#~ msgstr "Indiriliyor"
#~ msgid "Dutch"
#~ msgstr "Flaman"
#~ msgid "English"
#~ msgstr "Ingilizce"
#~ msgid "French"
#~ msgstr "Fransızca"
#~ msgid "Game ID"
#~ msgstr "Oyun ID"
#~ msgid "Game Region"
#~ msgstr "Oyun Bölgesi"
#~ msgid "German"
#~ msgstr "Almanca"
#~ msgid "Italian"
#~ msgstr "Italyanca"
#~ msgid "Japanese"
#~ msgstr "Japonca"
#~ msgid "Korean"
#~ msgstr "Korece"
#~ msgid "Left"
#~ msgstr "Sol"
#~ msgid "Like SysMenu"
#~ msgstr "Sistem Menüsü Gibi"
#~ msgid "Load From SD/USB"
#~ msgstr "SD/USB den yükle"
#~ msgid "Locked"
#~ msgstr "Kilitlendi"
#~ msgid "Loop Sound"
#~ msgstr "Döngüdeki Ses"
#~ msgid "Neither"
#~ msgstr "Hiçbiri"
#~ msgid "Next"
#~ msgstr "Ileri"
#~ msgid "ON"
#~ msgstr "AÇIK"
#~ msgid "Only Customs"
#~ msgstr "Sadece Kişiseller"
#~ msgid "Only Original"
#~ msgstr "Sadece Orjinal"
#~ msgid "Only for Install"
#~ msgstr "Sadece Kurulum için"
#~ msgid "Original/Customs"
#~ msgstr "Orjinal/Kişisel"
#~ msgid "Prev"
#~ msgstr "Önceki"
#~ msgid "Right"
#~ msgstr "Sağ"
#~ msgid "SChinese"
#~ msgstr "Basitleştirilmis Çince"
#~ msgid "Sound+BGM"
#~ msgstr "Ses+BGM"
#~ msgid "Sound+Quiet"
#~ msgstr "Ses+Quiet"
#~ msgid "Spanish"
#~ msgstr "Ispanyolca"
#~ msgid "System Default"
#~ msgstr "Sistem Varsayılanı"
#~ msgid "TChinese"
#~ msgstr "Geleneksel Çince"
#~ msgid "The wad file was installed. But It could not be deleted from the SD card."
#~ msgstr "Wad dosyası kuruldu. Fakat SD den silinemedi"
#~ msgid "The wad installation failed with error %ld"
#~ msgstr "Wad kurulumu %ld hatasıyla başarısız oldu"
#~ msgid "Unable to open the wad that was just downloaded (%s)."
#~ msgstr "Az önce indirilen wad açılamıyor(%s)"
#~ msgid "Unlocked"
#~ msgstr "Kilit açıldı"
#~ msgid "Update to"
#~ msgstr "Güncellenecek"
#~ msgid "Updating"
#~ msgstr "Güncelleniyor"
#~ msgid "Updating Language Files..."
#~ msgstr "Dil Dosyaları Güncelleniyor..."
#~ msgid "Updating WiiTDB.zip"
#~ msgstr "WiiTDB.zip güncelleniyor"
#~ msgid "Widescreen Fix"
#~ msgstr "Genişekran Çözümü"
#~ msgid "%s : %s May not boot correctly if your System Menu is not up to date."
#~ msgstr "%s: Sisteminiz güncel değil %s doğru şekilde başlatılamayabilir"

View File

@ -23,9 +23,6 @@ SOURCES := source \
source/sounds \
source/system \
source/libs/libwbfs \
source/libs/libfat \
source/libs/libntfs \
source/libs/libext2fs \
source/language \
source/mload \
source/mload/modules \
@ -56,7 +53,7 @@ INCLUDES := source
# options for code generation
#---------------------------------------------------------------------------------
CFLAGS = -g -O4 -Wall -Wno-multichar $(MACHDEP) $(INCLUDE) -DHAVE_CONFIG_H
CFLAGS = -g -O3 -Wall -Wno-multichar $(MACHDEP) $(INCLUDE) -DHAVE_CONFIG_H
CXXFLAGS = -Xassembler -aln=$@.lst $(CFLAGS)
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80B00000,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size
-include $(PROJECTDIR)/Make.config
@ -65,7 +62,7 @@ LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80B00
# any extra libraries we wish to link with the project
#---------------------------------------------------------------------------------
LIBS := -lpngu -lpng -lgd -lm -lz -lwiiuse -lbte -lasnd -logc -lfreetype -lvorbisidec \
-lmad -lmxml -ljpeg -lzip -lcustomext2fs
-lmad -lmxml -ljpeg -lzip -lcustomfat -lcustomntfs -lcustomext2fs
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
@ -128,7 +125,8 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
#---------------------------------------------------------------------------------
# build a list of library paths
#---------------------------------------------------------------------------------
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) -L$(CURDIR)/source/libs/libext2fs/ \
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) -L$(CURDIR)/source/libs/libfat/ \
-L$(CURDIR)/source/libs/libntfs/ -L$(CURDIR)/source/libs/libext2fs/ \
-L$(LIBOGC_LIB)
export OUTPUT := $(CURDIR)/$(TARGET)
@ -151,6 +149,11 @@ channel:
lang:
@[ -d build ] || mkdir -p build
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile language
#---------------------------------------------------------------------------------
theme:
@[ -d build ] || mkdir -p build
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile language
#---------------------------------------------------------------------------------
all:
@ -192,7 +195,7 @@ DEPENDS := $(OFILES:.o=.d)
$(OUTPUT).dol: $(OUTPUT).elf
$(OUTPUT).elf: $(OFILES)
language: $(wildcard $(PROJECTDIR)/Languages/*.lang)
language: $(wildcard $(PROJECTDIR)/Languages/*.lang) $(wildcard $(PROJECTDIR)/Themes/*.them)
#---------------------------------------------------------------------------------
# This rule links in binary data with .ttf, .png, and .mp3 extensions
#---------------------------------------------------------------------------------
@ -254,14 +257,20 @@ language: $(wildcard $(PROJECTDIR)/Languages/*.lang)
export PATH := $(PROJECTDIR)/gettext-bin:$(PATH)
%.pot: $(CFILES) $(CPPFILES)
@echo Update Language-Files ...
@xgettext -C -cTRANSLATORS --from-code=utf-8 --sort-output --no-wrap --no-location -k -ktr -ktrNOOP -o $@ $^
@echo Updating Languagefiles ...
@touch $(PROJECTDIR)/Languages/$(TARGET).pot
@xgettext -C -cTRANSLATORS --from-code=utf-8 --sort-output --no-wrap --no-location -ktr -o$(PROJECTDIR)/Languages/$(TARGET).pot -p $@ $^
@echo Updating Themefiles ...
@touch $(PROJECTDIR)/Themes/$(TARGET).pot
@xgettext -C -cTRANSLATORS --from-code=utf-8 -F --no-wrap --add-location -kthInt -kthColor -kthAlign -o$(PROJECTDIR)/Themes/$(TARGET).pot -p $@ $^
%.lang: $(PROJECTDIR)/Languages/$(TARGET).pot
@msgmerge -U -N --no-wrap --no-location --backup=none -q $@ $<
@touch $@
%.them: $(PROJECTDIR)/Themes/$(TARGET).pot
@msgmerge -U -N --no-wrap --no-location --backup=none -q $@ $<
@touch $@
-include $(DEPENDS)

405
Themes/Default.them Normal file
View File

@ -0,0 +1,405 @@
# USB Loader GX theme source file.
# don't delete/change this line (é).
# ONLY the value before the '-' char needs to be entered in msgstr ""
# not the complete text.
# It is important that the image folder is defined for the images to load.
# The image folder should be in the same folder as the .them file and include the theme images.
msgid ""
msgstr ""
"Project-Id-Version: USB Loader GX\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-26 16:16+0100\n"
"PO-Revision-Date: 2009-10-01 01:00+0200\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Image-Folder: Example\n"
"Last-Themer: Example\n"
"Theme-Team: Example\n"
msgid "r=0 g=0 b=0 a=255 - prompt windows text color"
msgstr ""
msgid "r=0 g=0 b=0 a=255 - settings text color"
msgstr ""
msgid "9 - game list browser page size"
msgstr ""
msgid "r=0 g=0 b=0 a=255 - game browser list text color"
msgstr ""
msgid "r=0 g=0 b=0 a=255 - game browser list text color over"
msgstr ""
msgid "r=55 g=190 b=237 a=255 - carousel game name text color"
msgstr ""
msgid "0 - game grid layout pos x"
msgstr ""
msgid "20 - game grid layout pos y"
msgstr ""
msgid "255 - tooltip alpha"
msgstr ""
msgid "r=55 g=190 b=237 a=255 - hdd info color"
msgstr ""
msgid "center - hdd info align ver"
msgstr ""
msgid "top - hdd info align hor"
msgstr ""
msgid "0 - hdd info pos x"
msgstr ""
msgid "400 - hdd info pos y"
msgstr ""
msgid "r=55 g=190 b=237 a=255 - game count color"
msgstr ""
msgid "center - game count align ver"
msgstr ""
msgid "top - game count align hor"
msgstr ""
msgid "0 - game count pos x"
msgstr ""
msgid "420 - game count pos y"
msgstr ""
msgid "16 - install btn pos x"
msgstr ""
msgid "355 - install btn pos y"
msgstr ""
msgid "371 - settings btn pos y"
msgstr ""
msgid "64 - settings btn pos x"
msgstr ""
msgid "371 - home menu btn pos x"
msgstr ""
msgid "489 - home menu btn pos x"
msgstr ""
msgid "355 - power off btn pos y"
msgstr ""
msgid "576 - power off btn pos x"
msgstr ""
msgid "160 - sd card btn pos x"
msgstr ""
msgid "395 - sd card btn pos y"
msgstr ""
msgid "405 - HBC btn pos y"
msgstr ""
msgid "410 - HBC btn pos x"
msgstr ""
msgid "26 - cover/download btn pos x"
msgstr ""
msgid "58 - cover/download btn pos y"
msgstr ""
msgid "305 - gameID btn pos y"
msgstr ""
msgid "68 - gameID btn pos x"
msgstr ""
msgid "r=138 g=138 b=138 a=240 - clock color"
msgstr ""
msgid "left - clock align ver"
msgstr ""
msgid "top - clock align hor"
msgstr ""
msgid "275 - clock pos x"
msgstr ""
msgid "275 - clock pos y"
msgstr ""
msgid "260 - list layout favorite btn pos x"
msgstr ""
msgid "288 - list layout favorite btn pos x widescreen"
msgstr ""
msgid "13 - list layout favorite btn pos y"
msgstr ""
msgid "300 - list layout search btn pos x"
msgstr ""
msgid "320 - list layout search btn pos x widescreen"
msgstr ""
msgid "13 - list layout search btn pos x"
msgstr ""
msgid "340 - list layout abc/sort btn pos x"
msgstr ""
msgid "352 - list layout abc/sort btn pos x widescreen"
msgstr ""
msgid "13 - list layout abc/sort btn pos y"
msgstr ""
msgid "380 - list layout list btn pos x"
msgstr ""
msgid "384 - list layout list btn pos x widescreen"
msgstr ""
msgid "13 - list layout list btn pos y"
msgstr ""
msgid "416 - list layout grid btn pos x widescreen"
msgstr ""
msgid "420 - list layout grid btn pos x"
msgstr ""
msgid "13 - list layout grid btn pos y"
msgstr ""
msgid "448 - list layout carousel btn pos x widescreen"
msgstr ""
msgid "460 - list layout carousel btn pos x"
msgstr ""
msgid "13 - list layout carousel btn pos y"
msgstr ""
msgid "480 - list layout lock btn pos x widescreen"
msgstr ""
msgid "500 - list layout lock btn pos x"
msgstr ""
msgid "13 - list layout lock btn pos y"
msgstr ""
msgid "512 - list layout dvd btn pos x widescreen"
msgstr ""
msgid "540 - list layout dvd btn pos x"
msgstr ""
msgid "13 - list layout dvd btn pos y"
msgstr ""
msgid "280 - game list layout height"
msgstr ""
msgid "396 - game list layout width"
msgstr ""
msgid "200 - game list layout pos x"
msgstr ""
msgid "49 - game list layout pos y"
msgstr ""
msgid "200 - grid layout favorite btn pos x"
msgstr ""
msgid "224 - grid layout favorite btn pos x widescreen"
msgstr ""
msgid "13 - grid layout favorite btn pos y"
msgstr ""
msgid "240 - grid layout search btn pos x"
msgstr ""
msgid "256 - grid layout search btn pos x widescreen"
msgstr ""
msgid "13 - grid layout search btn pos x"
msgstr ""
msgid "280 - grid layout abc/sort btn pos x"
msgstr ""
msgid "288 - grid layout abc/sort btn pos x widescreen"
msgstr ""
msgid "13 - grid layout abc/sort btn pos y"
msgstr ""
msgid "320 - grid layout list btn pos x"
msgstr ""
msgid "320 - grid layout list btn pos x widescreen"
msgstr ""
msgid "13 - grid layout list btn pos y"
msgstr ""
msgid "352 - grid layout grid btn pos x widescreen"
msgstr ""
msgid "360 - grid layout grid btn pos x"
msgstr ""
msgid "13 - grid layout grid btn pos y"
msgstr ""
msgid "384 - grid layout carousel btn pos x widescreen"
msgstr ""
msgid "400 - grid layout carousel btn pos x"
msgstr ""
msgid "13 - grid layout carousel btn pos y"
msgstr ""
msgid "416 - grid layout lock btn pos x widescreen"
msgstr ""
msgid "440 - grid layout lock btn pos x"
msgstr ""
msgid "13 - grid layout lock btn pos y"
msgstr ""
msgid "448 - grid layout dvd btn pos x widescreen"
msgstr ""
msgid "480 - grid layout dvd btn pos x"
msgstr ""
msgid "13 - grid layout dvd btn pos y"
msgstr ""
msgid "400 - game grid layout height"
msgstr ""
msgid "640 - game grid layout width"
msgstr ""
msgid "200 - carousel layout favorite btn pos x"
msgstr ""
msgid "224 - carousel layout favorite btn pos x widescreen"
msgstr ""
msgid "13 - carousel layout favorite btn pos y"
msgstr ""
msgid "240 - carousel layout search btn pos x"
msgstr ""
msgid "256 - carousel layout search btn pos x widescreen"
msgstr ""
msgid "13 - carousel layout search btn pos x"
msgstr ""
msgid "280 - carousel layout abc/sort btn pos x"
msgstr ""
msgid "288 - carousel layout abc/sort btn pos x widescreen"
msgstr ""
msgid "13 - carousel layout abc/sort btn pos y"
msgstr ""
msgid "320 - carousel layout list btn pos x"
msgstr ""
msgid "320 - carousel layout list btn pos x widescreen"
msgstr ""
msgid "13 - carousel layout list btn pos y"
msgstr ""
msgid "352 - carousel layout grid btn pos x widescreen"
msgstr ""
msgid "360 - carousel layout grid btn pos x"
msgstr ""
msgid "13 - carousel layout grid btn pos y"
msgstr ""
msgid "384 - carousel layout carousel btn pos x widescreen"
msgstr ""
msgid "400 - carousel layout carousel btn pos x"
msgstr ""
msgid "13 - carousel layout carousel btn pos y"
msgstr ""
msgid "416 - carousel layout lock btn pos x widescreen"
msgstr ""
msgid "440 - carousel layout lock btn pos x"
msgstr ""
msgid "13 - carousel layout lock btn pos y"
msgstr ""
msgid "448 - carousel layout dvd btn pos x widescreen"
msgstr ""
msgid "480 - carousel layout dvd btn pos x"
msgstr ""
msgid "13 - carousel layout dvd btn pos y"
msgstr ""
msgid "400 - game carousel layout height"
msgstr ""
msgid "640 - game carousel layout width"
msgstr ""
msgid "-20 - game carousel layout pos y"
msgstr ""
msgid "0 - game carousel layout pos x"
msgstr ""
msgid "1 - show hdd info: 1 for on and 0 for off"
msgstr ""
msgid "1 - show game count: 1 for on and 0 for off"
msgstr ""
msgid "r=55 g=190 b=237 a=255 - game id text color"
msgstr ""
msgid "r=55 g=190 b=237 a=255 - region info text color"
msgstr ""
msgid "30 - region info text pos x"
msgstr ""
msgid "68 - region info text pos x"
msgstr ""
msgid "1 - Enable tooltips: 0 for off and 1 for on"
msgstr ""

File diff suppressed because one or more lines are too long

View File

@ -55,9 +55,9 @@ bool DirList::LoadPath(const char * folder, const char *filter, u32 flags)
std::string folderpath = folder;
if(folderpath[folderpath.size()-1] == '/')
folderpath[folderpath.size()-1] = '\0';
folderpath.erase(folderpath.size()-1, 1);
const char * notRoot = strrchr(folderpath.c_str(), '/');
const char * notRoot = strchr(folderpath.c_str(), '/');
if(!notRoot)
folderpath += '/';

View File

@ -85,19 +85,25 @@ int BootGame(const char * gameID)
gprintf("\tSettings.partition: %d\n", Settings.partition);
struct discHdr gameHeader;
gameList.LoadUnfiltered();
if(!gameList.GetDiscHeader(gameID))
if(mountMethod == 0 && !gameList.GetDiscHeader(gameID))
{
gprintf("Game was not found: %s\n", gameID);
return -1;
}
else if(mountMethod && !dvdheader)
{
gprintf("Error: Loading empty disc header from DVD\n");
return -1;
}
struct discHdr gameHeader;
memcpy(&gameHeader, gameList.GetDiscHeader(gameID), sizeof(struct discHdr));
memcpy(&gameHeader, (mountMethod ? dvdheader : gameList.GetDiscHeader(gameID)), sizeof(struct discHdr));
delete dvdheader;
dvdheader = NULL;
int ret = 0;
struct discHdr * header = (mountMethod ? dvdheader : &gameHeader);
u8 videoChoice = Settings.videomode;
u8 languageChoice = Settings.language;
@ -111,7 +117,7 @@ int BootGame(const char * gameID)
u8 reloadblock = OFF;
u8 returnToLoaderGV = 1;
GameCFG * game_cfg = GameSettings.GetGameCFG(header->id);
GameCFG * game_cfg = GameSettings.GetGameCFG(gameHeader.id);
if (game_cfg)
{
@ -139,10 +145,10 @@ int BootGame(const char * gameID)
if (!mountMethod)
{
gprintf("Loading fragment list...");
ret = get_frag_list(header->id);
ret = get_frag_list(gameHeader.id);
gprintf("%d\n", ret);
ret = Disc_SetUSB(header->id);
ret = Disc_SetUSB(gameHeader.id);
if (ret < 0) Sys_BackToLoader();
gprintf("\tUSB set to game\n");
}
@ -158,19 +164,15 @@ int BootGame(const char * gameID)
if (ret < 0)
Sys_BackToLoader();
if (dvdheader) delete dvdheader;
gprintf("Loading BCA data...");
ret = do_bca_code(header->id);
ret = do_bca_code(gameHeader.id);
gprintf("%d\n", ret);
if (reloadblock == ON && IosLoader::IsHermesIOS())
{
enable_ES_ioctlv_vector();
if (load_from_fs == PART_FS_WBFS)
{
mload_close();
}
}
u32 channel = 0;

View File

@ -80,7 +80,7 @@ class BufferCircle
u16 Which() { return which; };
protected:
//!> Check if the position is a valid position in the vector
bool Valid(int pos) { return !(which < 0 || which >= Size()); };
bool Valid(int pos) { return !(pos < 0 || pos >= Size()); };
u16 which;
u32 BufferBlockSize;

View File

@ -39,14 +39,14 @@ int CheatMenu(const char * gameID)
GuiTrigger trigB;
trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B);
GuiText backBtnTxt(tr( "Back" ), 22, Theme.prompttext);
GuiText backBtnTxt(tr( "Back" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
backBtnTxt.SetMaxWidth(btnOutline.GetWidth() - 30);
GuiImage backBtnImg(&btnOutline);
GuiButton backBtn(&backBtnImg, &backBtnImg, 2, 3, -140, 400, &trigA, NULL, btnSoundClick2, 1);
backBtn.SetLabel(&backBtnTxt);
backBtn.SetTrigger(&trigB);
GuiText createBtnTxt(tr( "Create" ), 22, Theme.prompttext);
GuiText createBtnTxt(tr( "Create" ), 22, thColor("r=0 g=0 b=0 a=255 - prompt windows text color"));
createBtnTxt.SetMaxWidth(btnOutline.GetWidth() - 30);
GuiImage createBtnImg(&btnOutline);
GuiButton createBtn(&createBtnImg, &createBtnImg, 2, 3, 160, 400, &trigA, NULL, btnSoundClick2, 1);

View File

@ -1,638 +0,0 @@
/*
* bitops.h --- Bitmap frobbing code. The byte swapping routines are
* also included here.
*
* Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
*
* %Begin-Header%
* This file may be redistributed under the terms of the GNU Library
* General Public License, version 2.
* %End-Header%
*/
#ifndef _BITOPS_H_
#define _BITOPS_H_
extern int ext2fs_set_bit(unsigned int nr,void * addr);
extern int ext2fs_clear_bit(unsigned int nr, void * addr);
extern int ext2fs_test_bit(unsigned int nr, const void * addr);
extern void ext2fs_fast_set_bit(unsigned int nr,void * addr);
extern void ext2fs_fast_clear_bit(unsigned int nr, void * addr);
extern int ext2fs_set_bit64(__u64 nr,void * addr);
extern int ext2fs_clear_bit64(__u64 nr, void * addr);
extern int ext2fs_test_bit64(__u64 nr, const void * addr);
extern void ext2fs_fast_set_bit64(__u64 nr,void * addr);
extern void ext2fs_fast_clear_bit64(__u64 nr, void * addr);
extern __u16 ext2fs_swab16(__u16 val);
extern __u32 ext2fs_swab32(__u32 val);
extern __u64 ext2fs_swab64(__u64 val);
#ifdef WORDS_BIGENDIAN
#define ext2fs_cpu_to_le64(x) ext2fs_swab64((x))
#define ext2fs_le64_to_cpu(x) ext2fs_swab64((x))
#define ext2fs_cpu_to_le32(x) ext2fs_swab32((x))
#define ext2fs_le32_to_cpu(x) ext2fs_swab32((x))
#define ext2fs_cpu_to_le16(x) ext2fs_swab16((x))
#define ext2fs_le16_to_cpu(x) ext2fs_swab16((x))
#define ext2fs_cpu_to_be32(x) ((__u32)(x))
#define ext2fs_be32_to_cpu(x) ((__u32)(x))
#define ext2fs_cpu_to_be16(x) ((__u16)(x))
#define ext2fs_be16_to_cpu(x) ((__u16)(x))
#else
#define ext2fs_cpu_to_le64(x) ((__u64)(x))
#define ext2fs_le64_to_cpu(x) ((__u64)(x))
#define ext2fs_cpu_to_le32(x) ((__u32)(x))
#define ext2fs_le32_to_cpu(x) ((__u32)(x))
#define ext2fs_cpu_to_le16(x) ((__u16)(x))
#define ext2fs_le16_to_cpu(x) ((__u16)(x))
#define ext2fs_cpu_to_be32(x) ext2fs_swab32((x))
#define ext2fs_be32_to_cpu(x) ext2fs_swab32((x))
#define ext2fs_cpu_to_be16(x) ext2fs_swab16((x))
#define ext2fs_be16_to_cpu(x) ext2fs_swab16((x))
#endif
/*
* EXT2FS bitmap manipulation routines.
*/
/* Support for sending warning messages from the inline subroutines */
extern const char *ext2fs_block_string;
extern const char *ext2fs_inode_string;
extern const char *ext2fs_mark_string;
extern const char *ext2fs_unmark_string;
extern const char *ext2fs_test_string;
extern void ext2fs_warn_bitmap(errcode_t errcode, unsigned long arg,
const char *description);
extern void ext2fs_warn_bitmap2(ext2fs_generic_bitmap bitmap,
int code, unsigned long arg);
extern int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
extern int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block);
extern int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap, blk_t block);
extern int ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap, ext2_ino_t inode);
extern int ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap, ext2_ino_t inode);
extern void ext2fs_fast_mark_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block);
extern void ext2fs_fast_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block);
extern int ext2fs_fast_test_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block);
extern void ext2fs_fast_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern void ext2fs_fast_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern int ext2fs_fast_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern blk_t ext2fs_get_block_bitmap_start(ext2fs_block_bitmap bitmap);
extern ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap);
extern blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap);
extern ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap);
extern void ext2fs_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num);
extern void ext2fs_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num);
extern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num);
extern int ext2fs_test_inode_bitmap_range(ext2fs_inode_bitmap bitmap,
ino_t inode, int num);
extern void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num);
extern void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num);
extern int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num);
extern void ext2fs_set_bitmap_padding(ext2fs_generic_bitmap map);
/* These routines moved to gen_bitmap.c (actually, some of the above, too) */
extern int ext2fs_mark_generic_bitmap(ext2fs_generic_bitmap bitmap,
__u32 bitno);
extern int ext2fs_unmark_generic_bitmap(ext2fs_generic_bitmap bitmap,
blk_t bitno);
extern int ext2fs_test_generic_bitmap(ext2fs_generic_bitmap bitmap,
blk_t bitno);
extern int ext2fs_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num);
extern __u32 ext2fs_get_generic_bitmap_start(ext2fs_generic_bitmap bitmap);
extern __u32 ext2fs_get_generic_bitmap_end(ext2fs_generic_bitmap bitmap);
/* 64-bit versions */
extern int ext2fs_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block);
extern int ext2fs_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block);
extern int ext2fs_test_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block);
extern int ext2fs_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern int ext2fs_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern int ext2fs_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern void ext2fs_fast_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block);
extern void ext2fs_fast_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block);
extern int ext2fs_fast_test_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block);
extern void ext2fs_fast_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern void ext2fs_fast_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern int ext2fs_fast_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode);
extern blk64_t ext2fs_get_block_bitmap_start2(ext2fs_block_bitmap bitmap);
extern ext2_ino_t ext2fs_get_inode_bitmap_start2(ext2fs_inode_bitmap bitmap);
extern blk64_t ext2fs_get_block_bitmap_end2(ext2fs_block_bitmap bitmap);
extern ext2_ino_t ext2fs_get_inode_bitmap_end2(ext2fs_inode_bitmap bitmap);
extern int ext2fs_fast_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block,
unsigned int num);
extern void ext2fs_fast_mark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block,
unsigned int num);
extern void ext2fs_fast_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block,
unsigned int num);
/* These routines moved to gen_bitmap64.c */
extern void ext2fs_clear_generic_bmap(ext2fs_generic_bitmap bitmap);
extern errcode_t ext2fs_compare_generic_bmap(errcode_t neq,
ext2fs_generic_bitmap bm1,
ext2fs_generic_bitmap bm2);
extern void ext2fs_set_generic_bmap_padding(ext2fs_generic_bitmap bmap);
extern int ext2fs_mark_generic_bmap(ext2fs_generic_bitmap bitmap,
blk64_t bitno);
extern int ext2fs_unmark_generic_bmap(ext2fs_generic_bitmap bitmap,
blk64_t bitno);
extern int ext2fs_test_generic_bmap(ext2fs_generic_bitmap bitmap,
blk64_t bitno);
extern int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block, unsigned int num);
extern __u64 ext2fs_get_generic_bmap_start(ext2fs_generic_bitmap bitmap);
extern __u64 ext2fs_get_generic_bmap_end(ext2fs_generic_bitmap bitmap);
extern int ext2fs_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block, unsigned int num);
extern void ext2fs_mark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block, unsigned int num);
extern void ext2fs_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block, unsigned int num);
/*
* The inline routines themselves...
*
* If NO_INLINE_FUNCS is defined, then we won't try to do inline
* functions at all; they will be included as normal functions in
* inline.c
*/
#ifdef NO_INLINE_FUNCS
#if (defined(__GNUC__) && (defined(__i386__) || defined(__i486__) || \
defined(__i586__) || defined(__mc68000__)))
/* This prevents bitops.c from trying to include the C */
/* function version of these functions */
#define _EXT2_HAVE_ASM_BITOPS_
#endif
#endif /* NO_INLINE_FUNCS */
#if (defined(INCLUDE_INLINE_FUNCS) || !defined(NO_INLINE_FUNCS))
#ifdef INCLUDE_INLINE_FUNCS
#define _INLINE_ extern
#else
#ifdef __GNUC__
#define _INLINE_ extern __inline__
#else /* For Watcom C */
#define _INLINE_ extern inline
#endif
#endif
/*
* Fast bit set/clear functions that doesn't need to return the
* previous bit value.
*/
_INLINE_ void ext2fs_fast_set_bit(unsigned int nr,void * addr)
{
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
*ADDR |= (1 << (nr & 0x07));
}
_INLINE_ void ext2fs_fast_clear_bit(unsigned int nr, void * addr)
{
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
*ADDR &= ~(1 << (nr & 0x07));
}
_INLINE_ void ext2fs_fast_set_bit64(__u64 nr, void * addr)
{
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
*ADDR |= (1 << (nr & 0x07));
}
_INLINE_ void ext2fs_fast_clear_bit64(__u64 nr, void * addr)
{
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
*ADDR &= ~(1 << (nr & 0x07));
}
#if ((defined __GNUC__) && !defined(_EXT2_USE_C_VERSIONS_) && \
(defined(__i386__) || defined(__i486__) || defined(__i586__)))
#define _EXT2_HAVE_ASM_BITOPS_
#define _EXT2_HAVE_ASM_SWAB_
/*
* These are done by inline assembly for speed reasons.....
*
* All bitoperations return 0 if the bit was cleared before the
* operation and != 0 if it was not. Bit 0 is the LSB of addr; bit 32
* is the LSB of (addr+1).
*/
/*
* Some hacks to defeat gcc over-optimizations..
*/
struct __dummy_h { unsigned long a[100]; };
#define EXT2FS_ADDR (*(struct __dummy_h *) addr)
#define EXT2FS_CONST_ADDR (*(const struct __dummy_h *) addr)
_INLINE_ int ext2fs_set_bit(unsigned int nr, void * addr)
{
int oldbit;
addr = (void *) (((unsigned char *) addr) + (nr >> 3));
__asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0"
:"=r" (oldbit),"+m" (EXT2FS_ADDR)
:"r" (nr & 7));
return oldbit;
}
_INLINE_ int ext2fs_clear_bit(unsigned int nr, void * addr)
{
int oldbit;
addr = (void *) (((unsigned char *) addr) + (nr >> 3));
__asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0"
:"=r" (oldbit),"+m" (EXT2FS_ADDR)
:"r" (nr & 7));
return oldbit;
}
_INLINE_ int ext2fs_test_bit(unsigned int nr, const void * addr)
{
int oldbit;
addr = (const void *) (((const unsigned char *) addr) + (nr >> 3));
__asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0"
:"=r" (oldbit)
:"m" (EXT2FS_CONST_ADDR),"r" (nr & 7));
return oldbit;
}
_INLINE_ __u32 ext2fs_swab32(__u32 val)
{
#ifdef EXT2FS_REQUIRE_486
__asm__("bswap %0" : "=r" (val) : "0" (val));
#else
__asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */
"rorl $16,%0\n\t" /* swap words */
"xchgb %b0,%h0" /* swap higher bytes */
:"=q" (val)
: "0" (val));
#endif
return val;
}
_INLINE_ __u16 ext2fs_swab16(__u16 val)
{
__asm__("xchgb %b0,%h0" /* swap bytes */ \
: "=q" (val) \
: "0" (val)); \
return val;
}
#undef EXT2FS_ADDR
#endif /* i386 */
#if ((defined __GNUC__) && !defined(_EXT2_USE_C_VERSIONS_) && \
(defined(__mc68000__)))
#define _EXT2_HAVE_ASM_BITOPS_
_INLINE_ int ext2fs_set_bit(unsigned int nr,void * addr)
{
char retval;
__asm__ __volatile__ ("bfset %2@{%1:#1}; sne %0"
: "=d" (retval) : "d" (nr^7), "a" (addr));
return retval;
}
_INLINE_ int ext2fs_clear_bit(unsigned int nr, void * addr)
{
char retval;
__asm__ __volatile__ ("bfclr %2@{%1:#1}; sne %0"
: "=d" (retval) : "d" (nr^7), "a" (addr));
return retval;
}
_INLINE_ int ext2fs_test_bit(unsigned int nr, const void * addr)
{
char retval;
__asm__ __volatile__ ("bftst %2@{%1:#1}; sne %0"
: "=d" (retval) : "d" (nr^7), "a" (addr));
return retval;
}
#endif /* __mc68000__ */
#if !defined(_EXT2_HAVE_ASM_SWAB_)
_INLINE_ __u16 ext2fs_swab16(__u16 val)
{
return (val >> 8) | (val << 8);
}
_INLINE_ __u32 ext2fs_swab32(__u32 val)
{
return ((val>>24) | ((val>>8)&0xFF00) |
((val<<8)&0xFF0000) | (val<<24));
}
#endif /* !_EXT2_HAVE_ASM_SWAB */
_INLINE_ __u64 ext2fs_swab64(__u64 val)
{
return (ext2fs_swab32(val >> 32) |
(((__u64)ext2fs_swab32(val & 0xFFFFFFFFUL)) << 32));
}
_INLINE_ int ext2fs_mark_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block)
{
return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
block);
}
_INLINE_ int ext2fs_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block)
{
return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
block);
}
_INLINE_ int ext2fs_test_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block)
{
return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
block);
}
_INLINE_ int ext2fs_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ int ext2fs_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ int ext2fs_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ void ext2fs_fast_mark_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block)
{
ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap, block);
}
_INLINE_ void ext2fs_fast_unmark_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block)
{
ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, block);
}
_INLINE_ int ext2fs_fast_test_block_bitmap(ext2fs_block_bitmap bitmap,
blk_t block)
{
return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
block);
}
_INLINE_ void ext2fs_fast_mark_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
ext2fs_mark_generic_bitmap((ext2fs_generic_bitmap) bitmap, inode);
}
_INLINE_ void ext2fs_fast_unmark_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
ext2fs_unmark_generic_bitmap((ext2fs_generic_bitmap) bitmap, inode);
}
_INLINE_ int ext2fs_fast_test_inode_bitmap(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_test_generic_bitmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ blk_t ext2fs_get_block_bitmap_start(ext2fs_block_bitmap bitmap)
{
return ext2fs_get_generic_bitmap_start((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_start(ext2fs_inode_bitmap bitmap)
{
return ext2fs_get_generic_bitmap_start((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ blk_t ext2fs_get_block_bitmap_end(ext2fs_block_bitmap bitmap)
{
return ext2fs_get_generic_bitmap_end((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_end(ext2fs_inode_bitmap bitmap)
{
return ext2fs_get_generic_bitmap_end((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ int ext2fs_fast_test_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num)
{
return ext2fs_test_block_bitmap_range(bitmap, block, num);
}
_INLINE_ void ext2fs_fast_mark_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num)
{
ext2fs_mark_block_bitmap_range(bitmap, block, num);
}
_INLINE_ void ext2fs_fast_unmark_block_bitmap_range(ext2fs_block_bitmap bitmap,
blk_t block, int num)
{
ext2fs_unmark_block_bitmap_range(bitmap, block, num);
}
/* 64-bit versions */
_INLINE_ int ext2fs_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block)
{
return ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap,
block);
}
_INLINE_ int ext2fs_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block)
{
return ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap, block);
}
_INLINE_ int ext2fs_test_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block)
{
return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
block);
}
_INLINE_ int ext2fs_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ int ext2fs_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ int ext2fs_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ void ext2fs_fast_mark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block)
{
ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap, block);
}
_INLINE_ void ext2fs_fast_unmark_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block)
{
ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap, block);
}
_INLINE_ int ext2fs_fast_test_block_bitmap2(ext2fs_block_bitmap bitmap,
blk64_t block)
{
return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
block);
}
_INLINE_ void ext2fs_fast_mark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
ext2fs_mark_generic_bmap((ext2fs_generic_bitmap) bitmap, inode);
}
_INLINE_ void ext2fs_fast_unmark_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
ext2fs_unmark_generic_bmap((ext2fs_generic_bitmap) bitmap, inode);
}
_INLINE_ int ext2fs_fast_test_inode_bitmap2(ext2fs_inode_bitmap bitmap,
ext2_ino_t inode)
{
return ext2fs_test_generic_bmap((ext2fs_generic_bitmap) bitmap,
inode);
}
_INLINE_ blk64_t ext2fs_get_block_bitmap_start2(ext2fs_block_bitmap bitmap)
{
return ext2fs_get_generic_bmap_start((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_start2(ext2fs_inode_bitmap bitmap)
{
return ext2fs_get_generic_bmap_start((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ blk64_t ext2fs_get_block_bitmap_end2(ext2fs_block_bitmap bitmap)
{
return ext2fs_get_generic_bmap_end((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ ext2_ino_t ext2fs_get_inode_bitmap_end2(ext2fs_inode_bitmap bitmap)
{
return ext2fs_get_generic_bmap_end((ext2fs_generic_bitmap) bitmap);
}
_INLINE_ int ext2fs_fast_test_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block,
unsigned int num)
{
return ext2fs_test_block_bitmap_range2(bitmap, block, num);
}
_INLINE_ void ext2fs_fast_mark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block,
unsigned int num)
{
ext2fs_mark_block_bitmap_range2(bitmap, block, num);
}
_INLINE_ void ext2fs_fast_unmark_block_bitmap_range2(ext2fs_block_bitmap bitmap,
blk64_t block,
unsigned int num)
{
ext2fs_unmark_block_bitmap_range2(bitmap, block, num);
}
#undef _INLINE_
#endif
#endif

View File

@ -1,70 +0,0 @@
/*
* Header file for common error description library.
*
* Copyright 1988, Student Information Processing Board of the
* Massachusetts Institute of Technology.
*
* For copyright and distribution info, see the documentation supplied
* with this package.
*/
#if !defined(__COM_ERR_H) && !defined(__COM_ERR_H__)
#ifdef __GNUC__
#define COM_ERR_ATTR(x) __attribute__(x)
#else
#define COM_ERR_ATTR(x)
#endif
#ifndef DEBUG_GEKKO
#define OMIT_COM_ERR
#endif
#include <stddef.h>
#include <stdarg.h>
typedef long errcode_t;
struct error_table {
char const * const * msgs;
long base;
int n_msgs;
};
struct et_list;
extern void com_err (const char *, long, const char *, ...)
COM_ERR_ATTR((format(printf, 3, 4)));
extern void com_err_va (const char *whoami, errcode_t code, const char *fmt,
va_list args)
COM_ERR_ATTR((format(printf, 3, 0)));
extern char const *error_message (long);
extern void (*com_err_hook) (const char *, long, const char *, va_list);
extern void (*set_com_err_hook (void (*) (const char *, long,
const char *, va_list)))
(const char *, long, const char *, va_list);
extern void (*reset_com_err_hook (void)) (const char *, long,
const char *, va_list);
extern int init_error_table(const char * const *msgs, long base, int count);
extern errcode_t add_error_table(const struct error_table * et);
extern errcode_t remove_error_table(const struct error_table * et);
extern void add_to_error_table(struct et_list *new_table);
/* Provided for Heimdall compatibility */
extern const char *com_right(struct et_list *list, long code);
extern const char *com_right_r(struct et_list *list, long code, char *str, size_t len);
extern void initialize_error_table_r(struct et_list **list,
const char **messages,
int num_errors,
long base);
extern void free_error_table(struct et_list *et);
/* Provided for compatibility with other com_err libraries */
extern int et_list_lock(void);
extern int et_list_unlock(void);
#define __COM_ERR_H
#define __COM_ERR_H__
#endif /* !defined(__COM_ERR_H) && !defined(__COM_ERR_H__)*/

View File

@ -1,152 +0,0 @@
//
// Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
//
// This file may be redistributed under the terms of the GNU Public
// License.
#ifndef EXT2_ERR_H_
#define EXT2_ERR_H_
#define EXT2_ET_OK 0
#define EXT2_ET_BASE -1
#define EXT2_ET_MAGIC_EXT2FS_FILSYS -2
#define EXT2_ET_MAGIC_BADBLOCKS_LIST -3
#define EXT2_ET_MAGIC_BADBLOCKS_ITERATE -4
#define EXT2_ET_MAGIC_INODE_SCAN -5
#define EXT2_ET_MAGIC_IO_CHANNEL -6
#define EXT2_ET_MAGIC_UNIX_IO_CHANNEL -7
#define EXT2_ET_MAGIC_IO_MANAGER -8
#define EXT2_ET_MAGIC_BLOCK_BITMAP -9
#define EXT2_ET_MAGIC_INODE_BITMAP -10
#define EXT2_ET_MAGIC_GENERIC_BITMAP -11
#define EXT2_ET_MAGIC_TEST_IO_CHANNEL -12
#define EXT2_ET_MAGIC_DBLIST -13
#define EXT2_ET_MAGIC_ICOUNT -14
#define EXT2_ET_MAGIC_PQ_IO_CHANNEL -15
#define EXT2_ET_MAGIC_EXT2_FILE -16
#define EXT2_ET_MAGIC_E2IMAGE -17
#define EXT2_ET_MAGIC_INODE_IO_CHANNEL -18
#define EXT2_ET_MAGIC_EXTENT_HANDLE -19
#define EXT2_ET_BAD_MAGIC -20
#define EXT2_ET_REV_TOO_HIGH -21
#define EXT2_ET_RO_FILSYS -22
#define EXT2_ET_GDESC_READ -23
#define EXT2_ET_GDESC_WRITE -24
#define EXT2_ET_GDESC_BAD_BLOCK_MAP -25
#define EXT2_ET_GDESC_BAD_INODE_MAP -26
#define EXT2_ET_GDESC_BAD_INODE_TABLE -27
#define EXT2_ET_INODE_BITMAP_WRITE -28
#define EXT2_ET_INODE_BITMAP_READ -29
#define EXT2_ET_BLOCK_BITMAP_WRITE -30
#define EXT2_ET_BLOCK_BITMAP_READ -31
#define EXT2_ET_INODE_TABLE_WRITE -32
#define EXT2_ET_INODE_TABLE_READ -33
#define EXT2_ET_NEXT_INODE_READ -34
#define EXT2_ET_UNEXPECTED_BLOCK_SIZE -35
#define EXT2_ET_DIR_CORRUPTED -36
#define EXT2_ET_SHORT_READ -37
#define EXT2_ET_SHORT_WRITE -38
#define EXT2_ET_DIR_NO_SPACE -39
#define EXT2_ET_NO_INODE_BITMAP -40
#define EXT2_ET_NO_BLOCK_BITMAP -41
#define EXT2_ET_BAD_INODE_NUM -42
#define EXT2_ET_BAD_BLOCK_NUM -45
#define EXT2_ET_EXPAND_DIR_ERR -46
#define EXT2_ET_TOOSMALL -47
#define EXT2_ET_BAD_BLOCK_MARK -48
#define EXT2_ET_BAD_BLOCK_UNMARK -49
#define EXT2_ET_BAD_BLOCK_TEST -50
#define EXT2_ET_BAD_INODE_MARK -51
#define EXT2_ET_BAD_INODE_UNMARK -52
#define EXT2_ET_BAD_INODE_TEST -53
#define EXT2_ET_FUDGE_BLOCK_BITMAP_END -54
#define EXT2_ET_FUDGE_INODE_BITMAP_END -55
#define EXT2_ET_BAD_IND_BLOCK -56
#define EXT2_ET_BAD_DIND_BLOCK -57
#define EXT2_ET_BAD_TIND_BLOCK -58
#define EXT2_ET_NEQ_BLOCK_BITMAP -59
#define EXT2_ET_NEQ_INODE_BITMAP -60
#define EXT2_ET_BAD_DEVICE_NAME -61
#define EXT2_ET_MISSING_INODE_TABLE -62
#define EXT2_ET_CORRUPT_SUPERBLOCK -63
#define EXT2_ET_BAD_GENERIC_MARK -64
#define EXT2_ET_BAD_GENERIC_UNMARK -65
#define EXT2_ET_BAD_GENERIC_TEST -66
#define EXT2_ET_SYMLINK_LOOP -67
#define EXT2_ET_CALLBACK_NOTHANDLED -68
#define EXT2_ET_BAD_BLOCK_IN_INODE_TABLE -69
#define EXT2_ET_UNSUPP_FEATURE -70
#define EXT2_ET_RO_UNSUPP_FEATURE -71
#define EXT2_ET_LLSEEK_FAILED -72
#define EXT2_ET_NO_MEMORY -73
#define EXT2_ET_INVALID_ARGUMENT -74
#define EXT2_ET_BLOCK_ALLOC_FAIL -75
#define EXT2_ET_INODE_ALLOC_FAIL -76
#define EXT2_ET_NO_DIRECTORY -77
#define EXT2_ET_TOO_MANY_REFS -78
#define EXT2_ET_FILE_NOT_FOUND -79
#define EXT2_ET_FILE_RO -80
#define EXT2_ET_DB_NOT_FOUND -81
#define EXT2_ET_DIR_EXISTS -82
#define EXT2_ET_UNIMPLEMENTED -83
#define EXT2_ET_CANCEL_REQUESTED -84
#define EXT2_ET_FILE_TOO_BIG -85
#define EXT2_ET_JOURNAL_NOT_BLOCK -86
#define EXT2_ET_NO_JOURNAL_SB -87
#define EXT2_ET_JOURNAL_TOO_SMALL -88
#define EXT2_ET_JOURNAL_UNSUPP_VERSION -89
#define EXT2_ET_LOAD_EXT_JOURNAL -90
#define EXT2_ET_NO_JOURNAL -91
#define EXT2_ET_DIRHASH_UNSUPP -92
#define EXT2_ET_BAD_EA_BLOCK_NUM -93
#define EXT2_ET_TOO_MANY_INODES -94
#define EXT2_ET_NOT_IMAGE_FILE -95
#define EXT2_ET_RES_GDT_BLOCKS -96
#define EXT2_ET_RESIZE_INODE_CORRUPT -97
#define EXT2_ET_SET_BMAP_NO_IND -98
#define EXT2_ET_TDB_SUCCESS -99
#define EXT2_ET_TDB_ERR_CORRUPT -100
#define EXT2_ET_TDB_ERR_IO -101
#define EXT2_ET_TDB_ERR_LOCK -102
#define EXT2_ET_TDB_ERR_OOM -103
#define EXT2_ET_TDB_ERR_EXISTS -104
#define EXT2_ET_TDB_ERR_NOLOCK -105
#define EXT2_ET_TDB_ERR_EINVAL -106
#define EXT2_ET_TDB_ERR_NOEXIST -107
#define EXT2_ET_TDB_ERR_RDONLY -108
#define EXT2_ET_DBLIST_EMPTY -109
#define EXT2_ET_RO_BLOCK_ITERATE -110
#define EXT2_ET_MAGIC_EXTENT_PATH -111
#define EXT2_ET_MAGIC_RESERVED_10 -112
#define EXT2_ET_MAGIC_RESERVED_11 -113
#define EXT2_ET_MAGIC_RESERVED_12 -114
#define EXT2_ET_MAGIC_RESERVED_13 -115
#define EXT2_ET_MAGIC_RESERVED_14 -116
#define EXT2_ET_MAGIC_RESERVED_15 -117
#define EXT2_ET_MAGIC_RESERVED_16 -118
#define EXT2_ET_MAGIC_RESERVED_17 -119
#define EXT2_ET_MAGIC_RESERVED_18 -120
#define EXT2_ET_MAGIC_RESERVED_19 -121
#define EXT2_ET_EXTENT_HEADER_BAD -122
#define EXT2_ET_EXTENT_INDEX_BAD -123
#define EXT2_ET_EXTENT_LEAF_BAD -124
#define EXT2_ET_EXTENT_NO_SPACE -125
#define EXT2_ET_INODE_NOT_EXTENT -126
#define EXT2_ET_EXTENT_NO_NEXT -127
#define EXT2_ET_EXTENT_NO_PREV -128
#define EXT2_ET_EXTENT_NO_UP -129
#define EXT2_ET_EXTENT_NO_DOWN -130
#define EXT2_ET_NO_CURRENT_NODE -131
#define EXT2_ET_OP_NOT_SUPPORTED -132
#define EXT2_ET_CANT_INSERT_EXTENT -133
#define EXT2_ET_CANT_SPLIT_EXTENT -134
#define EXT2_ET_EXTENT_NOT_FOUND -135
#define EXT2_ET_EXTENT_NOT_SUPPORTED -136
#define EXT2_ET_EXTENT_INVALID_LENGTH -137
#define EXT2_ET_IO_CHANNEL_NO_SUPPORT_64 -138
#define EXT2_NO_MTAB_FILE -139
#define EXT2_ET_MAGIC_GENERIC_BITMAP64 -140
#define EXT2_ET_MAGIC_BLOCK_BITMAP64 -141
#define EXT2_ET_MAGIC_INODE_BITMAP64 -142
#define EXT2_ET_CANT_USE_LEGACY_BITMAPS -143
#endif

View File

@ -1,71 +0,0 @@
/*
File: linux/ext2_ext_attr.h
On-disk format of extended attributes for the ext2 filesystem.
(C) 2000 Andreas Gruenbacher, <a.gruenbacher@computer.org>
*/
#ifndef _EXT2_EXT_ATTR_H
#define _EXT2_EXT_ATTR_H
/* Magic value in attribute blocks */
#define EXT2_EXT_ATTR_MAGIC_v1 0xEA010000
#define EXT2_EXT_ATTR_MAGIC 0xEA020000
/* Maximum number of references to one attribute block */
#define EXT2_EXT_ATTR_REFCOUNT_MAX 1024
struct ext2_ext_attr_header {
__u32 h_magic; /* magic number for identification */
__u32 h_refcount; /* reference count */
__u32 h_blocks; /* number of disk blocks used */
__u32 h_hash; /* hash value of all attributes */
__u32 h_reserved[4]; /* zero right now */
};
struct ext2_ext_attr_entry {
__u8 e_name_len; /* length of name */
__u8 e_name_index; /* attribute name index */
__u16 e_value_offs; /* offset in disk block of value */
__u32 e_value_block; /* disk block attribute is stored on (n/i) */
__u32 e_value_size; /* size of attribute value */
__u32 e_hash; /* hash value of name and value */
#if 0
char e_name[0]; /* attribute name */
#endif
};
#define EXT2_EXT_ATTR_PAD_BITS 2
#define EXT2_EXT_ATTR_PAD ((unsigned) 1<<EXT2_EXT_ATTR_PAD_BITS)
#define EXT2_EXT_ATTR_ROUND (EXT2_EXT_ATTR_PAD-1)
#define EXT2_EXT_ATTR_LEN(name_len) \
(((name_len) + EXT2_EXT_ATTR_ROUND + \
sizeof(struct ext2_ext_attr_entry)) & ~EXT2_EXT_ATTR_ROUND)
#define EXT2_EXT_ATTR_NEXT(entry) \
( (struct ext2_ext_attr_entry *)( \
(char *)(entry) + EXT2_EXT_ATTR_LEN((entry)->e_name_len)) )
#define EXT2_EXT_ATTR_SIZE(size) \
(((size) + EXT2_EXT_ATTR_ROUND) & ~EXT2_EXT_ATTR_ROUND)
#define EXT2_EXT_IS_LAST_ENTRY(entry) (*((__u32 *)(entry)) == 0UL)
#define EXT2_EXT_ATTR_NAME(entry) \
(((char *) (entry)) + sizeof(struct ext2_ext_attr_entry))
#define EXT2_XATTR_LEN(name_len) \
(((name_len) + EXT2_EXT_ATTR_ROUND + \
sizeof(struct ext2_xattr_entry)) & ~EXT2_EXT_ATTR_ROUND)
#define EXT2_XATTR_SIZE(size) \
(((size) + EXT2_EXT_ATTR_ROUND) & ~EXT2_EXT_ATTR_ROUND)
#ifdef __KERNEL__
# ifdef CONFIG_EXT2_FS_EXT_ATTR
extern int ext2_get_ext_attr(struct inode *, const char *, char *, size_t, int);
extern int ext2_set_ext_attr(struct inode *, const char *, char *, size_t, int);
extern void ext2_ext_attr_free_inode(struct inode *inode);
extern void ext2_ext_attr_put_super(struct super_block *sb);
extern int ext2_ext_attr_init(void);
extern void ext2_ext_attr_done(void);
# else
# define ext2_get_ext_attr NULL
# define ext2_set_ext_attr NULL
# endif
#endif /* __KERNEL__ */
#endif /* _EXT2_EXT_ATTR_H */

View File

@ -1,60 +0,0 @@
#include "ext2_internal.h"
#include "ext2_frag.h"
typedef struct _PrivData
{
_ext2_frag_append_t append_fragment;
void * callback_data;
} PrivDataST;
static int block_iter_callback(ext2_filsys fs, blk64_t *blocknr, e2_blkcnt_t blockcnt, blk64_t ref_block, int ref_offset, void *privateData)
{
PrivDataST *priv = (PrivDataST *) privateData;
blk64_t block;
block = *blocknr;
return priv->append_fragment(priv->callback_data, blockcnt*fs->io->block_size/512, block*fs->io->block_size/512, fs->io->block_size/512);
}
int _EXT2_get_fragments(const char *in_path, _ext2_frag_append_t append_fragment, void *callback_data)
{
ext2_inode_t *ni = NULL;
ext2_vd *vd;
vd = ext2GetVolume(in_path);
if(!vd)
{
errno = EXDEV;
return -1;
}
// Get the actual path of the entry
const char * path = ext2RealPath(in_path);
if (!path) {
errno = EINVAL;
return -1;
}
// Find the entry
ni = ext2OpenEntry(vd, path);
if (!ni) {
errno = ENOENT;
return -1;
}
PrivDataST priv;
priv.callback_data = callback_data;
priv.append_fragment = append_fragment;
int ret = ext2fs_block_iterate3(vd->fs, ni->ino, BLOCK_FLAG_DATA_ONLY, NULL, block_iter_callback, &priv);
if(ret == 0)
ret = priv.append_fragment(callback_data, EXT2_I_SIZE(&ni->ni) >> 9, 0, 0);
ext2UpdateTimes(vd, ni, EXT2_UPDATE_ATIME);
ext2CloseEntry(vd, ni);
return ret;
}

View File

@ -1,107 +0,0 @@
#include "ext2_internal.h"
#include "ext2_frag.h"
#include "mem_allocate.h"
typedef struct _DataBlocks
{
u32 block;
u32 blockcnt;
} DataBlocks;
typedef struct _PrivData
{
DataBlocks * blocks;
u32 blocksCnt;
} PrivDataST;
static int block_iter_callback(ext2_filsys fs, blk_t *blocknr, int blockcnt, void *privateData)
{
PrivDataST *priv = (PrivDataST *) privateData;
if(!priv->blocks)
priv->blocks = (DataBlocks *) mem_alloc(sizeof(DataBlocks));
priv->blocksCnt++;
DataBlocks * tmp = (DataBlocks *) mem_realloc(priv->blocks, priv->blocksCnt*sizeof(DataBlocks));
if(!tmp)
{
free(priv->blocks);
priv->blocks = NULL;
return -1;
}
priv->blocks = tmp;
priv->blocks[priv->blocksCnt-1].block = *blocknr;
priv->blocks[priv->blocksCnt-1].blockcnt = blockcnt;
return 0;
}
int _EXT2_get_fragments(const char *in_path, _ext2_frag_append_t append_fragment, void *callback_data)
{
ext2_inode_t *ni = NULL;
ext2_vd *vd;
vd = ext2GetVolume(in_path);
if(!vd)
{
errno = EXDEV;
return -1;
}
// Get the actual path of the entry
const char * path = ext2RealPath(in_path);
if (!path) {
errno = EINVAL;
return -1;
}
// Find the entry
ni = ext2OpenEntry(vd, path);
if (!ni) {
errno = ENOENT;
return -1;
}
PrivDataST priv;
priv.blocks = NULL;
priv.blocksCnt = 0;
int ret = ext2fs_block_iterate(vd->fs, ni->ino, BLOCK_FLAG_DATA_ONLY, NULL, block_iter_callback, &priv);
if(ret == 0 && priv.blocksCnt > 0)
{
int i = 0;
u32 size = 1;
u32 block_size = vd->fs->io->block_size/512;
int printfs = 30;
for(i = 0; i < priv.blocksCnt-1; ++i)
{
//size = priv.blocks[i+1].blockcnt-priv.blocks[i].blockcnt;
ret = append_fragment(callback_data, priv.blocks[i].blockcnt*block_size, priv.blocks[i].block*block_size, size*block_size);
if(ret)
break;
if(printfs > 0)
{
printfs--;
}
}
if(ret == 0)
ret = append_fragment(callback_data, priv.blocks[i].blockcnt*block_size, priv.blocks[i].block*block_size, block_size);
}
if(ret == 0)
ret = append_fragment(callback_data, EXT2_I_SIZE(&ni->ni) >> 9, 0, 0);
if(priv.blocks)
mem_free(priv.blocks);
ext2UpdateTimes(vd, ni, EXT2_UPDATE_ATIME);
ext2CloseEntry(vd, ni);
return ret;
}

View File

@ -1,798 +0,0 @@
/*
* linux/include/linux/ext2_fs.h
*
* Copyright (C) 1992, 1993, 1994, 1995
* Remy Card (card@masi.ibp.fr)
* Laboratoire MASI - Institut Blaise Pascal
* Universite Pierre et Marie Curie (Paris VI)
*
* from
*
* linux/include/linux/minix_fs.h
*
* Copyright (C) 1991, 1992 Linus Torvalds
*/
#ifndef _LINUX_EXT2_FS_H
#define _LINUX_EXT2_FS_H
#include "ext2_types.h" /* Changed from linux/types.h */
/*
* The second extended filesystem constants/structures
*/
/*
* Define EXT2FS_DEBUG to produce debug messages
*/
#undef EXT2FS_DEBUG
/*
* Define EXT2_PREALLOCATE to preallocate data blocks for expanding files
*/
#define EXT2_PREALLOCATE
#define EXT2_DEFAULT_PREALLOC_BLOCKS 8
/*
* The second extended file system version
*/
#define EXT2FS_DATE "95/08/09"
#define EXT2FS_VERSION "0.5b"
/*
* Special inode numbers
*/
#define EXT2_BAD_INO 1 /* Bad blocks inode */
#define EXT2_ROOT_INO 2 /* Root inode */
#define EXT2_ACL_IDX_INO 3 /* ACL inode */
#define EXT2_ACL_DATA_INO 4 /* ACL inode */
#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
#define EXT2_RESIZE_INO 7 /* Reserved group descriptors inode */
#define EXT2_JOURNAL_INO 8 /* Journal inode */
#define EXT2_EXCLUDE_INO 9 /* The "exclude" inode, for snapshots */
/* First non-reserved inode for old ext2 filesystems */
#define EXT2_GOOD_OLD_FIRST_INO 11
/*
* The second extended file system magic number
*/
#define EXT2_SUPER_MAGIC 0xEF53
#ifdef __KERNEL__
#define EXT2_SB(sb) (&((sb)->u.ext2_sb))
#else
/* Assume that user mode programs are passing in an ext2fs superblock, not
* a kernel struct super_block. This will allow us to call the feature-test
* macros from user land. */
#define EXT2_SB(sb) (sb)
#endif
/*
* Maximal count of links to a file
*/
#define EXT2_LINK_MAX 65000
/*
* Macro-instructions used to manage several block sizes
*/
#define EXT2_MIN_BLOCK_LOG_SIZE 10 /* 1024 */
#define EXT2_MAX_BLOCK_LOG_SIZE 16 /* 65536 */
#define EXT2_MIN_BLOCK_SIZE (1 << EXT2_MIN_BLOCK_LOG_SIZE)
#define EXT2_MAX_BLOCK_SIZE (1 << EXT2_MAX_BLOCK_LOG_SIZE)
#ifdef __KERNEL__
#define EXT2_BLOCK_SIZE(s) ((s)->s_blocksize)
#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits)
#define EXT2_ADDR_PER_BLOCK_BITS(s) (EXT2_SB(s)->addr_per_block_bits)
#define EXT2_INODE_SIZE(s) (EXT2_SB(s)->s_inode_size)
#define EXT2_FIRST_INO(s) (EXT2_SB(s)->s_first_ino)
#else
#define EXT2_BLOCK_SIZE(s) (EXT2_MIN_BLOCK_SIZE << (s)->s_log_block_size)
#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
EXT2_GOOD_OLD_INODE_SIZE : (s)->s_inode_size)
#define EXT2_FIRST_INO(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
EXT2_GOOD_OLD_FIRST_INO : (s)->s_first_ino)
#endif
#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof(__u32))
/*
* Macro-instructions used to manage fragments
*/
#define EXT2_MIN_FRAG_SIZE EXT2_MIN_BLOCK_SIZE
#define EXT2_MAX_FRAG_SIZE EXT2_MAX_BLOCK_SIZE
#define EXT2_MIN_FRAG_LOG_SIZE EXT2_MIN_BLOCK_LOG_SIZE
#ifdef __KERNEL__
# define EXT2_FRAG_SIZE(s) (EXT2_SB(s)->s_frag_size)
# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_SB(s)->s_frags_per_block)
#else
# define EXT2_FRAG_SIZE(s) (EXT2_MIN_FRAG_SIZE << (s)->s_log_frag_size)
# define EXT2_FRAGS_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_FRAG_SIZE(s))
#endif
/*
* ACL structures
*/
struct ext2_acl_header /* Header of Access Control Lists */
{
__u32 aclh_size;
__u32 aclh_file_count;
__u32 aclh_acle_count;
__u32 aclh_first_acle;
};
struct ext2_acl_entry /* Access Control List Entry */
{
__u32 acle_size;
__u16 acle_perms; /* Access permissions */
__u16 acle_type; /* Type of entry */
__u16 acle_tag; /* User or group identity */
__u16 acle_pad1;
__u32 acle_next; /* Pointer on next entry for the */
/* same inode or on next free entry */
};
/*
* Structure of a blocks group descriptor
*/
struct ext2_group_desc
{
__u32 bg_block_bitmap; /* Blocks bitmap block */
__u32 bg_inode_bitmap; /* Inodes bitmap block */
__u32 bg_inode_table; /* Inodes table block */
__u16 bg_free_blocks_count; /* Free blocks count */
__u16 bg_free_inodes_count; /* Free inodes count */
__u16 bg_used_dirs_count; /* Directories count */
__u16 bg_flags;
__u32 bg_reserved[2];
__u16 bg_itable_unused; /* Unused inodes count */
__u16 bg_checksum; /* crc16(s_uuid+grouo_num+group_desc)*/
};
/*
* Structure of a blocks group descriptor
*/
struct ext4_group_desc
{
__u32 bg_block_bitmap; /* Blocks bitmap block */
__u32 bg_inode_bitmap; /* Inodes bitmap block */
__u32 bg_inode_table; /* Inodes table block */
__u16 bg_free_blocks_count; /* Free blocks count */
__u16 bg_free_inodes_count; /* Free inodes count */
__u16 bg_used_dirs_count; /* Directories count */
__u16 bg_flags; /* EXT4_BG_flags (INODE_UNINIT, etc) */
__u32 bg_reserved[2]; /* Likely block/inode bitmap checksum */
__u16 bg_itable_unused; /* Unused inodes count */
__u16 bg_checksum; /* crc16(sb_uuid+group+desc) */
__u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
__u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
__u32 bg_inode_table_hi; /* Inodes table block MSB */
__u16 bg_free_blocks_count_hi;/* Free blocks count MSB */
__u16 bg_free_inodes_count_hi;/* Free inodes count MSB */
__u16 bg_used_dirs_count_hi; /* Directories count MSB */
__u16 bg_itable_unused_hi; /* Unused inodes count MSB */
__u32 bg_reserved2[3];
};
#define EXT2_BG_INODE_UNINIT 0x0001 /* Inode table/bitmap not initialized */
#define EXT2_BG_BLOCK_UNINIT 0x0002 /* Block bitmap not initialized */
#define EXT2_BG_INODE_ZEROED 0x0004 /* On-disk itable initialized to zero */
/*
* Data structures used by the directory indexing feature
*
* Note: all of the multibyte integer fields are little endian.
*/
/*
* Note: dx_root_info is laid out so that if it should somehow get
* overlaid by a dirent the two low bits of the hash version will be
* zero. Therefore, the hash version mod 4 should never be 0.
* Sincerely, the paranoia department.
*/
struct ext2_dx_root_info {
__u32 reserved_zero;
__u8 hash_version; /* 0 now, 1 at release */
__u8 info_length; /* 8 */
__u8 indirect_levels;
__u8 unused_flags;
};
#define EXT2_HASH_LEGACY 0
#define EXT2_HASH_HALF_MD4 1
#define EXT2_HASH_TEA 2
#define EXT2_HASH_LEGACY_UNSIGNED 3 /* reserved for userspace lib */
#define EXT2_HASH_HALF_MD4_UNSIGNED 4 /* reserved for userspace lib */
#define EXT2_HASH_TEA_UNSIGNED 5 /* reserved for userspace lib */
#define EXT2_HASH_FLAG_INCOMPAT 0x1
struct ext2_dx_entry {
__u32 hash;
__u32 block;
};
struct ext2_dx_countlimit {
__u16 limit;
__u16 count;
};
/*
* Macro-instructions used to manage group descriptors
*/
#define EXT2_MIN_DESC_SIZE 32
#define EXT2_MIN_DESC_SIZE_64BIT 64
#define EXT2_MAX_DESC_SIZE EXT2_MIN_BLOCK_SIZE
#define EXT2_DESC_SIZE(s) \
((EXT2_SB(s)->s_feature_incompat & EXT4_FEATURE_INCOMPAT_64BIT) ? \
(s)->s_desc_size : EXT2_MIN_DESC_SIZE)
#define EXT2_BLOCKS_PER_GROUP(s) (EXT2_SB(s)->s_blocks_per_group)
#define EXT2_INODES_PER_GROUP(s) (EXT2_SB(s)->s_inodes_per_group)
#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
/* limits imposed by 16-bit value gd_free_{blocks,inode}_count */
#define EXT2_MAX_BLOCKS_PER_GROUP(s) ((1 << 16) - 8)
#define EXT2_MAX_INODES_PER_GROUP(s) ((1 << 16) - EXT2_INODES_PER_BLOCK(s))
#ifdef __KERNEL__
#define EXT2_DESC_PER_BLOCK(s) (EXT2_SB(s)->s_desc_per_block)
#define EXT2_DESC_PER_BLOCK_BITS(s) (EXT2_SB(s)->s_desc_per_block_bits)
#else
#define EXT2_DESC_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
#endif
/*
* Constants relative to the data blocks
*/
#define EXT2_NDIR_BLOCKS 12
#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
/*
* Inode flags
*/
#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */
#define EXT2_UNRM_FL 0x00000002 /* Undelete */
#define EXT2_COMPR_FL 0x00000004 /* Compress file */
#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */
#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */
#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */
#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */
#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */
/* Reserved for compression usage... */
#define EXT2_DIRTY_FL 0x00000100
#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
#define EXT2_NOCOMPR_FL 0x00000400 /* Access raw compressed data */
#define EXT2_ECOMPR_FL 0x00000800 /* Compression error */
/* End compression flags --- maybe not all used */
#define EXT2_BTREE_FL 0x00001000 /* btree format dir */
#define EXT2_INDEX_FL 0x00001000 /* hash-indexed directory */
#define EXT2_IMAGIC_FL 0x00002000
#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
#define EXT2_NOTAIL_FL 0x00008000 /* file tail should not be merged */
#define EXT2_DIRSYNC_FL 0x00010000 /* Synchronous directory modifications */
#define EXT2_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */
#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
#define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */
#define EXT4_EOFBLOCKS_FL 0x00400000 /* Blocks allocated beyond EOF */
#define EXT4_SNAPFILE_FL 0x01000000 /* Inode is a snapshot */
#define EXT4_SNAPFILE_DELETED_FL 0x04000000 /* Snapshot is being deleted */
#define EXT4_SNAPFILE_SHRUNK_FL 0x08000000 /* Snapshot shrink has completed */
#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
#define EXT2_FL_USER_VISIBLE 0x004BDFFF /* User visible flags */
#define EXT2_FL_USER_MODIFIABLE 0x004B80FF /* User modifiable flags */
/*
* ioctl commands
*/
/* Used for online resize */
struct ext2_new_group_input {
__u32 group; /* Group number for this data */
__u32 block_bitmap; /* Absolute block number of block bitmap */
__u32 inode_bitmap; /* Absolute block number of inode bitmap */
__u32 inode_table; /* Absolute block number of inode table start */
__u32 blocks_count; /* Total number of blocks in this group */
__u16 reserved_blocks; /* Number of reserved blocks in this group */
__u16 unused; /* Number of reserved GDT blocks in group */
};
struct ext4_new_group_input {
__u32 group; /* Group number for this data */
__u64 block_bitmap; /* Absolute block number of block bitmap */
__u64 inode_bitmap; /* Absolute block number of inode bitmap */
__u64 inode_table; /* Absolute block number of inode table start */
__u32 blocks_count; /* Total number of blocks in this group */
__u16 reserved_blocks; /* Number of reserved blocks in this group */
__u16 unused;
};
#ifdef __GNU__ /* Needed for the Hurd */
#define _IOT_ext2_new_group_input _IOT (_IOTS(__u32), 5, _IOTS(__u16), 2, 0, 0)
#endif
#define EXT2_IOC_GETFLAGS _IOR('f', 1, long)
#define EXT2_IOC_SETFLAGS _IOW('f', 2, long)
#define EXT2_IOC_GETVERSION _IOR('v', 1, long)
#define EXT2_IOC_SETVERSION _IOW('v', 2, long)
#define EXT2_IOC_GETVERSION_NEW _IOR('f', 3, long)
#define EXT2_IOC_SETVERSION_NEW _IOW('f', 4, long)
#define EXT2_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long)
#define EXT2_IOC_GROUP_ADD _IOW('f', 8,struct ext2_new_group_input)
#define EXT4_IOC_GROUP_ADD _IOW('f', 8,struct ext4_new_group_input)
/*
* Structure of an inode on the disk
*/
struct ext2_inode {
__u16 i_mode; /* File mode */
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u32 i_size; /* Size in bytes */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Inode change time */
__u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u16 i_gid; /* Low 16 bits of Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks; /* Blocks count */
__u32 i_flags; /* File flags */
union {
struct {
__u32 l_i_version; /* was l_i_reserved1 */
} linux1;
struct {
__u32 h_i_translator;
} hurd1;
} osd1; /* OS dependent 1 */
__u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
__u32 i_generation; /* File version (for NFS) */
__u32 i_file_acl; /* File ACL */
__u32 i_size_high; /* Formerly i_dir_acl, directory ACL */
__u32 i_faddr; /* Fragment address */
union {
struct {
__u16 l_i_blocks_hi;
__u16 l_i_file_acl_high;
__u16 l_i_uid_high; /* these 2 fields */
__u16 l_i_gid_high; /* were reserved2[0] */
__u32 l_i_reserved2;
} linux2;
struct {
__u8 h_i_frag; /* Fragment number */
__u8 h_i_fsize; /* Fragment size */
__u16 h_i_mode_high;
__u16 h_i_uid_high;
__u16 h_i_gid_high;
__u32 h_i_author;
} hurd2;
} osd2; /* OS dependent 2 */
};
/*
* Permanent part of an large inode on the disk
*/
struct ext2_inode_large {
__u16 i_mode; /* File mode */
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u32 i_size; /* Size in bytes */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Inode Change time */
__u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u16 i_gid; /* Low 16 bits of Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks; /* Blocks count */
__u32 i_flags; /* File flags */
union {
struct {
__u32 l_i_version; /* was l_i_reserved1 */
} linux1;
struct {
__u32 h_i_translator;
} hurd1;
} osd1; /* OS dependent 1 */
__u32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
__u32 i_generation; /* File version (for NFS) */
__u32 i_file_acl; /* File ACL */
__u32 i_size_high; /* Formerly i_dir_acl, directory ACL */
__u32 i_faddr; /* Fragment address */
union {
struct {
__u16 l_i_blocks_hi;
__u16 l_i_file_acl_high;
__u16 l_i_uid_high; /* these 2 fields */
__u16 l_i_gid_high; /* were reserved2[0] */
__u32 l_i_reserved2;
} linux2;
struct {
__u8 h_i_frag; /* Fragment number */
__u8 h_i_fsize; /* Fragment size */
__u16 h_i_mode_high;
__u16 h_i_uid_high;
__u16 h_i_gid_high;
__u32 h_i_author;
} hurd2;
} osd2; /* OS dependent 2 */
__u16 i_extra_isize;
__u16 i_pad1;
__u32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */
__u32 i_mtime_extra; /* extra Modification time (nsec << 2 | epoch) */
__u32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */
__u32 i_crtime; /* File creation time */
__u32 i_crtime_extra; /* extra File creation time (nsec << 2 | epoch)*/
__u32 i_version_hi; /* high 32 bits for 64-bit version */
};
#define i_dir_acl i_size_high
#if defined(__KERNEL__) || defined(__linux__)
#define i_reserved1 osd1.linux1.l_i_reserved1
#define i_frag osd2.linux2.l_i_frag
#define i_fsize osd2.linux2.l_i_fsize
#define i_uid_low i_uid
#define i_gid_low i_gid
#define i_uid_high osd2.linux2.l_i_uid_high
#define i_gid_high osd2.linux2.l_i_gid_high
#define i_reserved2 osd2.linux2.l_i_reserved2
#else
#if defined(__GNU__)
#define i_translator osd1.hurd1.h_i_translator
#define i_frag osd2.hurd2.h_i_frag;
#define i_fsize osd2.hurd2.h_i_fsize;
#define i_uid_high osd2.hurd2.h_i_uid_high
#define i_gid_high osd2.hurd2.h_i_gid_high
#define i_author osd2.hurd2.h_i_author
#endif /* __GNU__ */
#endif /* defined(__KERNEL__) || defined(__linux__) */
#define inode_uid(inode) ((inode).i_uid | (inode).osd2.linux2.l_i_uid_high << 16)
#define inode_gid(inode) ((inode).i_gid | (inode).osd2.linux2.l_i_gid_high << 16)
#define ext2fs_set_i_uid_high(inode,x) ((inode).osd2.linux2.l_i_uid_high = (x))
#define ext2fs_set_i_gid_high(inode,x) ((inode).osd2.linux2.l_i_gid_high = (x))
/*
* File system states
*/
#define EXT2_VALID_FS 0x0001 /* Unmounted cleanly */
#define EXT2_ERROR_FS 0x0002 /* Errors detected */
#define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */
/*
* Misc. filesystem flags
*/
#define EXT2_FLAGS_SIGNED_HASH 0x0001 /* Signed dirhash in use */
#define EXT2_FLAGS_UNSIGNED_HASH 0x0002 /* Unsigned dirhash in use */
#define EXT2_FLAGS_TEST_FILESYS 0x0004 /* OK for use on development code */
#define EXT2_FLAGS_IS_SNAPSHOT 0x0010 /* This is a snapshot image */
#define EXT2_FLAGS_FIX_SNAPSHOT 0x0020 /* Snapshot inodes corrupted */
#define EXT2_FLAGS_FIX_EXCLUDE 0x0040 /* Exclude bitmaps corrupted */
/*
* Mount flags
*/
#define EXT2_MOUNT_CHECK 0x0001 /* Do mount-time checks */
#define EXT2_MOUNT_GRPID 0x0004 /* Create files with directory's group */
#define EXT2_MOUNT_DEBUG 0x0008 /* Some debugging messages */
#define EXT2_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
#define EXT2_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
#define EXT2_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
#define EXT2_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */
#define EXT2_MOUNT_NO_UID32 0x0200 /* Disable 32-bit UIDs */
#define clear_opt(o, opt) o &= ~EXT2_MOUNT_##opt
#define set_opt(o, opt) o |= EXT2_MOUNT_##opt
#define test_opt(sb, opt) (EXT2_SB(sb)->s_mount_opt & \
EXT2_MOUNT_##opt)
/*
* Maximal mount counts between two filesystem checks
*/
#define EXT2_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
#define EXT2_DFL_CHECKINTERVAL 0 /* Don't use interval check */
/*
* Behaviour when detecting errors
*/
#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
#define EXT2_ERRORS_PANIC 3 /* Panic */
#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
#if (__GNUC__ >= 4)
#define ext4_offsetof(TYPE,MEMBER) __builtin_offsetof(TYPE,MEMBER)
#else
#define ext4_offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
/*
* Structure of the super block
*/
struct ext2_super_block {
__u32 s_inodes_count; /* Inodes count */
__u32 s_blocks_count; /* Blocks count */
__u32 s_r_blocks_count; /* Reserved blocks count */
__u32 s_free_blocks_count; /* Free blocks count */
__u32 s_free_inodes_count; /* Free inodes count */
__u32 s_first_data_block; /* First Data Block */
__u32 s_log_block_size; /* Block size */
__s32 s_log_frag_size; /* Fragment size */
__u32 s_blocks_per_group; /* # Blocks per group */
__u32 s_frags_per_group; /* # Fragments per group */
__u32 s_inodes_per_group; /* # Inodes per group */
__u32 s_mtime; /* Mount time */
__u32 s_wtime; /* Write time */
__u16 s_mnt_count; /* Mount count */
__s16 s_max_mnt_count; /* Maximal mount count */
__u16 s_magic; /* Magic signature */
__u16 s_state; /* File system state */
__u16 s_errors; /* Behaviour when detecting errors */
__u16 s_minor_rev_level; /* minor revision level */
__u32 s_lastcheck; /* time of last check */
__u32 s_checkinterval; /* max. time between checks */
__u32 s_creator_os; /* OS */
__u32 s_rev_level; /* Revision level */
__u16 s_def_resuid; /* Default uid for reserved blocks */
__u16 s_def_resgid; /* Default gid for reserved blocks */
/*
* These fields are for EXT2_DYNAMIC_REV superblocks only.
*
* Note: the difference between the compatible feature set and
* the incompatible feature set is that if there is a bit set
* in the incompatible feature set that the kernel doesn't
* know about, it should refuse to mount the filesystem.
*
* e2fsck's requirements are more strict; if it doesn't know
* about a feature in either the compatible or incompatible
* feature set, it must abort and not try to meddle with
* things it doesn't understand...
*/
__u32 s_first_ino; /* First non-reserved inode */
__u16 s_inode_size; /* size of inode structure */
__u16 s_block_group_nr; /* block group # of this superblock */
__u32 s_feature_compat; /* compatible feature set */
__u32 s_feature_incompat; /* incompatible feature set */
__u32 s_feature_ro_compat; /* readonly-compatible feature set */
__u8 s_uuid[16]; /* 128-bit uuid for volume */
char s_volume_name[16]; /* volume name */
char s_last_mounted[64]; /* directory where last mounted */
__u32 s_algorithm_usage_bitmap; /* For compression */
/*
* Performance hints. Directory preallocation should only
* happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
*/
__u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
__u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
__u16 s_reserved_gdt_blocks; /* Per group table for online growth */
/*
* Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
*/
__u8 s_journal_uuid[16]; /* uuid of journal superblock */
__u32 s_journal_inum; /* inode number of journal file */
__u32 s_journal_dev; /* device number of journal file */
__u32 s_last_orphan; /* start of list of inodes to delete */
__u32 s_hash_seed[4]; /* HTREE hash seed */
__u8 s_def_hash_version; /* Default hash version to use */
__u8 s_jnl_backup_type; /* Default type of journal backup */
__u16 s_desc_size; /* Group desc. size: INCOMPAT_64BIT */
__u32 s_default_mount_opts;
__u32 s_first_meta_bg; /* First metablock group */
__u32 s_mkfs_time; /* When the filesystem was created */
__u32 s_jnl_blocks[17]; /* Backup of the journal inode */
__u32 s_blocks_count_hi; /* Blocks count high 32bits */
__u32 s_r_blocks_count_hi; /* Reserved blocks count high 32 bits*/
__u32 s_free_blocks_hi; /* Free blocks count */
__u16 s_min_extra_isize; /* All inodes have at least # bytes */
__u16 s_want_extra_isize; /* New inodes should reserve # bytes */
__u32 s_flags; /* Miscellaneous flags */
__u16 s_raid_stride; /* RAID stride */
__u16 s_mmp_interval; /* # seconds to wait in MMP checking */
__u64 s_mmp_block; /* Block for multi-mount protection */
__u32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
__u8 s_log_groups_per_flex; /* FLEX_BG group size */
__u8 s_reserved_char_pad;
__u16 s_reserved_pad; /* Padding to next 32bits */
__u64 s_kbytes_written; /* nr of lifetime kilobytes written */
__u32 s_snapshot_inum; /* Inode number of active snapshot */
__u32 s_snapshot_id; /* sequential ID of active snapshot */
__u64 s_snapshot_r_blocks_count; /* reserved blocks for active
snapshot's future use */
__u32 s_snapshot_list; /* inode number of the head of the on-disk snapshot list */
#define EXT4_S_ERR_START ext4_offsetof(struct ext2_super_block, s_error_count)
__u32 s_error_count; /* number of fs errors */
__u32 s_first_error_time; /* first time an error happened */
__u32 s_first_error_ino; /* inode involved in first error */
__u64 s_first_error_block; /* block involved of first error */
__u8 s_first_error_func[32]; /* function where the error happened */
__u32 s_first_error_line; /* line number where error happened */
__u32 s_last_error_time; /* most recent time of an error */
__u32 s_last_error_ino; /* inode involved in last error */
__u32 s_last_error_line; /* line number where error happened */
__u64 s_last_error_block; /* block involved of last error */
__u8 s_last_error_func[32]; /* function where the error happened */
#define EXT4_S_ERR_END ext4_offsetof(struct ext2_super_block, s_mount_opts)
__u8 s_mount_opts[64];
__u32 s_reserved[112]; /* Padding to the end of the block */
};
#define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
/*
* Codes for operating systems
*/
#define EXT2_OS_LINUX 0
#define EXT2_OS_HURD 1
#define EXT2_OBSO_OS_MASIX 2
#define EXT2_OS_FREEBSD 3
#define EXT2_OS_LITES 4
/*
* Revision levels
*/
#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */
#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
#define EXT2_CURRENT_REV EXT2_GOOD_OLD_REV
#define EXT2_MAX_SUPP_REV EXT2_DYNAMIC_REV
#define EXT2_GOOD_OLD_INODE_SIZE 128
/*
* Journal inode backup types
*/
#define EXT3_JNL_BACKUP_BLOCKS 1
/*
* Feature set definitions
*/
#define EXT2_HAS_COMPAT_FEATURE(sb,mask) \
( EXT2_SB(sb)->s_feature_compat & (mask) )
#define EXT2_HAS_RO_COMPAT_FEATURE(sb,mask) \
( EXT2_SB(sb)->s_feature_ro_compat & (mask) )
#define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \
( EXT2_SB(sb)->s_feature_incompat & (mask) )
#define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001
#define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
#define EXT2_FEATURE_COMPAT_EXT_ATTR 0x0008
#define EXT2_FEATURE_COMPAT_RESIZE_INODE 0x0010
#define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020
#define EXT2_FEATURE_COMPAT_LAZY_BG 0x0040
#define EXT2_FEATURE_COMPAT_EXCLUDE_INODE 0x0080
#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
/* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */
#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008
#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040
#define EXT4_FEATURE_RO_COMPAT_HAS_SNAPSHOT 0x0080
#define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001
#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
#define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
#define EXT4_FEATURE_INCOMPAT_EA_INODE 0x0400
#define EXT4_FEATURE_INCOMPAT_DIRDATA 0x1000
#define EXT2_FEATURE_COMPAT_SUPP 0
#define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE)
#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \
EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \
EXT4_FEATURE_RO_COMPAT_DIR_NLINK| \
EXT2_FEATURE_RO_COMPAT_BTREE_DIR)
/*
* Default values for user and/or group using reserved blocks
*/
#define EXT2_DEF_RESUID 0
#define EXT2_DEF_RESGID 0
/*
* Default mount options
*/
#define EXT2_DEFM_DEBUG 0x0001
#define EXT2_DEFM_BSDGROUPS 0x0002
#define EXT2_DEFM_XATTR_USER 0x0004
#define EXT2_DEFM_ACL 0x0008
#define EXT2_DEFM_UID16 0x0010
#define EXT3_DEFM_JMODE 0x0060
#define EXT3_DEFM_JMODE_DATA 0x0020
#define EXT3_DEFM_JMODE_ORDERED 0x0040
#define EXT3_DEFM_JMODE_WBACK 0x0060
#define EXT4_DEFM_NOBARRIER 0x0100
#define EXT4_DEFM_BLOCK_VALIDITY 0x0200
#define EXT4_DEFM_DISCARD 0x0400
#define EXT4_DEFM_NODELALLOC 0x0800
/*
* Structure of a directory entry
*/
#define EXT2_NAME_LEN 255
struct ext2_dir_entry {
__u32 inode; /* Inode number */
__u16 rec_len; /* Directory entry length */
__u16 name_len; /* Name length */
char name[EXT2_NAME_LEN]; /* File name */
};
/*
* The new version of the directory entry. Since EXT2 structures are
* stored in intel byte order, and the name_len field could never be
* bigger than 255 chars, it's safe to reclaim the extra byte for the
* file_type field.
*/
struct ext2_dir_entry_2 {
__u32 inode; /* Inode number */
__u16 rec_len; /* Directory entry length */
__u8 name_len; /* Name length */
__u8 file_type;
char name[EXT2_NAME_LEN]; /* File name */
};
/*
* Ext2 directory file types. Only the low 3 bits are used. The
* other bits are reserved for now.
*/
#define EXT2_FT_UNKNOWN 0
#define EXT2_FT_REG_FILE 1
#define EXT2_FT_DIR 2
#define EXT2_FT_CHRDEV 3
#define EXT2_FT_BLKDEV 4
#define EXT2_FT_FIFO 5
#define EXT2_FT_SOCK 6
#define EXT2_FT_SYMLINK 7
#define EXT2_FT_MAX 8
/*
* EXT2_DIR_PAD defines the directory entries boundaries
*
* NOTE: It must be a multiple of 4
*/
#define EXT2_DIR_PAD 4
#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1)
#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \
~EXT2_DIR_ROUND)
/*
* This structure will be used for multiple mount protection. It will be
* written into the block number saved in the s_mmp_block field in the
* superblock.
*/
#define EXT2_MMP_MAGIC 0x004D4D50 /* ASCII for MMP */
#define EXT2_MMP_CLEAN 0xFF4D4D50 /* Value of mmp_seq for clean unmount */
#define EXT2_MMP_FSCK_ON 0xE24D4D50 /* Value of mmp_seq when being fscked */
struct mmp_struct {
__u32 mmp_magic;
__u32 mmp_seq;
__u64 mmp_time;
char mmp_nodename[64];
char mmp_bdevname[32];
__u16 mmp_interval;
__u16 mmp_pad1;
__u32 mmp_pad2;
};
/*
* Interval in number of seconds to update the MMP sequence number.
*/
#define EXT2_MMP_DEF_INTERVAL 5
#endif /* _LINUX_EXT2_FS_H */

View File

@ -1,102 +0,0 @@
/**
* ext2_internal.h
*
* Copyright (c) 2009 Rhys "Shareese" Koedijk
* Copyright (c) 2010 Dimok
*
* This program/include file 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/include file 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 EXT2_INTERNAL_H_
#define EXT2_INTERNAL_H_
#include <gccore.h>
#include <ogc/disc_io.h>
#include <sys/iosupport.h>
#include "ext2fs.h"
#include "ext2_fs.h"
#include "mem_allocate.h"
#ifdef DEBUG_GEKKO
#define ext2_log_trace printf
#else
#define ext2_log_trace(...)
#endif
typedef struct _ext2_inode_t
{
struct ext2_inode ni;
ext2_ino_t ino;
bool dirty;
} ext2_inode_t;
/**
* ext2_vd - EXT2 volume descriptor
*/
typedef struct _ext2_vd
{
io_channel io; /* EXT device handle */
ext2_filsys fs; /* EXT volume handle */
mutex_t lock; /* Volume lock mutex */
ext2_inode_t *cwd_ni; /* Current directory */
struct _ext2_dir_state *firstOpenDir; /* The start of a FILO linked list of currently opened directories */
struct _ext2_file_state *firstOpenFile; /* The start of a FILO linked list of currently opened files */
u16 openDirCount; /* The total number of directories currently open in this volume */
u16 openFileCount; /* The total number of files currently open in this volume */
ext2_ino_t root; /* Root node */
} ext2_vd;
typedef enum {
EXT2_UPDATE_ATIME = 0x01,
EXT2_UPDATE_MTIME = 0x02,
EXT2_UPDATE_CTIME = 0x04,
EXT2_UPDATE_AMTIME = EXT2_UPDATE_ATIME | EXT2_UPDATE_MTIME,
EXT2_UPDATE_ACTIME = EXT2_UPDATE_ATIME | EXT2_UPDATE_CTIME,
EXT2_UPDATE_MCTIME = EXT2_UPDATE_MTIME | EXT2_UPDATE_CTIME,
EXT2_UPDATE_AMCTIME = EXT2_UPDATE_ATIME | EXT2_UPDATE_MTIME | EXT2_UPDATE_CTIME,
} ext2_time_update_flags;
/* Lock volume */
static inline void ext2Lock (ext2_vd *vd)
{
LWP_MutexLock(vd->lock);
}
/* Unlock volume */
static inline void ext2Unlock (ext2_vd *vd)
{
LWP_MutexUnlock(vd->lock);
}
const char *ext2RealPath (const char *path);
int ext2InitVolume (ext2_vd *vd);
void ext2DeinitVolume (ext2_vd *vd);
ext2_vd *ext2GetVolume (const char *path);
int ext2AddDevice (const char *name, void *deviceData);
void ext2RemoveDevice (const char *path);
const devoptab_t *ext2GetDevice (const char *path);
ext2_inode_t *ext2OpenEntry (ext2_vd *vd, const char *path);
void ext2CloseEntry (ext2_vd *vd, ext2_inode_t * ni);
int ext2Stat (ext2_vd *vd, ext2_inode_t * ni, struct stat *st);
int ext2Sync (ext2_vd *vd, ext2_inode_t * ni);
ext2_inode_t *ext2Create (ext2_vd *vd, const char *path, mode_t type, const char *target);
int ext2Link (ext2_vd *vd, const char *old_path, const char *new_path);
int ext2Unlink (ext2_vd *vd, const char *path);
void ext2UpdateTimes(ext2_vd *vd, ext2_inode_t *ni, ext2_time_update_flags mask);
#endif

View File

@ -1,136 +0,0 @@
/*
* io.h --- the I/O manager abstraction
*
* Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
*
* %Begin-Header%
* This file may be redistributed under the terms of the GNU Library
* General Public License, version 2.
* %End-Header%
*/
#ifndef _EXT2FS_EXT2_IO_H
#define _EXT2FS_EXT2_IO_H
#include "ext2fs.h"
/*
* ext2_loff_t is defined here since unix_io.c needs it.
*/
typedef long long ext2_loff_t;
/* llseek.c */
ext2_loff_t ext2fs_llseek (int, ext2_loff_t, int);
typedef struct struct_io_manager *io_manager;
typedef struct struct_io_channel *io_channel;
typedef struct struct_io_stats *io_stats;
#define CHANNEL_FLAGS_WRITETHROUGH 0x01
struct struct_io_channel {
errcode_t magic;
io_manager manager;
char *name;
int block_size;
errcode_t (*read_error)(io_channel channel,
unsigned long block,
int count,
void *data,
size_t size,
int actual_bytes_read,
errcode_t error);
errcode_t (*write_error)(io_channel channel,
unsigned long block,
int count,
const void *data,
size_t size,
int actual_bytes_written,
errcode_t error);
int refcount;
int flags;
long reserved[14];
void *private_data;
void *app_data;
};
struct struct_io_stats {
int num_fields;
int reserved;
unsigned long long bytes_read;
unsigned long long bytes_written;
};
struct struct_io_manager {
errcode_t magic;
const char *name;
errcode_t (*open)(const char *name, int flags, io_channel *channel);
errcode_t (*close)(io_channel channel);
errcode_t (*set_blksize)(io_channel channel, int blksize);
errcode_t (*read_blk)(io_channel channel, unsigned long block,
int count, void *data);
errcode_t (*write_blk)(io_channel channel, unsigned long block,
int count, const void *data);
errcode_t (*flush)(io_channel channel);
errcode_t (*write_byte)(io_channel channel, unsigned long offset,
int count, const void *data);
errcode_t (*set_option)(io_channel channel, const char *option,
const char *arg);
errcode_t (*get_stats)(io_channel channel, io_stats *io_stats);
errcode_t (*read_blk64)(io_channel channel, unsigned long long block,
int count, void *data);
errcode_t (*write_blk64)(io_channel channel, unsigned long long block,
int count, const void *data);
long reserved[16];
};
#define IO_FLAG_RW 0x0001
#define IO_FLAG_EXCLUSIVE 0x0002
#define IO_FLAG_DIRECT_IO 0x0004
/*
* Convenience functions....
*/
#define io_channel_close(c) ((c)->manager->close((c)))
#define io_channel_set_blksize(c,s) ((c)->manager->set_blksize((c),s))
#define io_channel_read_blk(c,b,n,d) ((c)->manager->read_blk((c),b,n,d))
#define io_channel_write_blk(c,b,n,d) ((c)->manager->write_blk((c),b,n,d))
#define io_channel_flush(c) ((c)->manager->flush((c)))
#define io_channel_bumpcount(c) ((c)->refcount++)
/* io_manager.c */
extern errcode_t io_channel_set_options(io_channel channel,
const char *options);
extern errcode_t io_channel_write_byte(io_channel channel,
unsigned long offset,
int count, const void *data);
extern errcode_t io_channel_read_blk64(io_channel channel,
unsigned long long block,
int count, void *data);
extern errcode_t io_channel_write_blk64(io_channel channel,
unsigned long long block,
int count, const void *data);
/* unix_io.c */
extern io_manager unix_io_manager;
/* undo_io.c */
extern io_manager undo_io_manager;
extern errcode_t set_undo_io_backing_manager(io_manager manager);
extern errcode_t set_undo_io_backup_file(char *file_name);
/* test_io.c */
extern io_manager test_io_manager, test_io_backing_manager;
extern void (*test_io_cb_read_blk)
(unsigned long block, int count, errcode_t err);
extern void (*test_io_cb_write_blk)
(unsigned long block, int count, errcode_t err);
extern void (*test_io_cb_read_blk64)
(unsigned long long block, int count, errcode_t err);
extern void (*test_io_cb_write_blk64)
(unsigned long long block, int count, errcode_t err);
extern void (*test_io_cb_set_blksize)
(int blksize, errcode_t err);
#endif /* _EXT2FS_EXT2_IO_H */

View File

@ -1,18 +0,0 @@
/*
* If linux/types.h is already been included, assume it has defined
* everything we need. (cross fingers) Other header files may have
* also defined the types that we need.
*/
#ifndef _EXT2_TYPES_H
#define _EXT2_TYPES_H
typedef unsigned char __u8;
typedef signed char __s8;
typedef unsigned short __u16;
typedef short __s16;
typedef unsigned int __u32;
typedef int __s32;
typedef unsigned long long __u64;
typedef signed long long __s64;
#endif /* _EXT2_TYPES_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,109 +0,0 @@
/*
* Copyright (c) 2003,2004 Cluster File Systems, Inc, info@clusterfs.com
* Written by Alex Tomas <alex@clusterfs.com>
*
* %Begin-Header%
* This file may be redistributed under the terms of the GNU Library
* General Public License, version 2.
* %End-Header%
*/
#ifndef _LINUX_EXT3_EXTENTS
#define _LINUX_EXT3_EXTENTS
/*
* ext3_inode has i_block array (total 60 bytes)
* first 4 bytes are used to store:
* - tree depth (0 mean there is no tree yet. all extents in the inode)
* - number of alive extents in the inode
*/
/*
* this is extent on-disk structure
* it's used at the bottom of the tree
*/
struct ext3_extent {
__u32 ee_block; /* first logical block extent covers */
__u16 ee_len; /* number of blocks covered by extent */
__u16 ee_start_hi; /* high 16 bits of physical block */
__u32 ee_start; /* low 32 bigs of physical block */
};
/*
* this is index on-disk structure
* it's used at all the levels, but the bottom
*/
struct ext3_extent_idx {
__u32 ei_block; /* index covers logical blocks from 'block' */
__u32 ei_leaf; /* pointer to the physical block of the next *
* level. leaf or next index could bet here */
__u16 ei_leaf_hi; /* high 16 bits of physical block */
__u16 ei_unused;
};
/*
* each block (leaves and indexes), even inode-stored has header
*/
struct ext3_extent_header {
__u16 eh_magic; /* probably will support different formats */
__u16 eh_entries; /* number of valid entries */
__u16 eh_max; /* capacity of store in entries */
__u16 eh_depth; /* has tree real underlaying blocks? */
__u32 eh_generation; /* generation of the tree */
};
#define EXT3_EXT_MAGIC 0xf30a
/*
* array of ext3_ext_path contains path to some extent
* creation/lookup routines use it for traversal/splitting/etc
* truncate uses it to simulate recursive walking
*/
struct ext3_ext_path {
__u32 p_block;
__u16 p_depth;
struct ext3_extent *p_ext;
struct ext3_extent_idx *p_idx;
struct ext3_extent_header *p_hdr;
struct buffer_head *p_bh;
};
/*
* EXT_INIT_MAX_LEN is the maximum number of blocks we can have in an
* initialized extent. This is 2^15 and not (2^16 - 1), since we use the
* MSB of ee_len field in the extent datastructure to signify if this
* particular extent is an initialized extent or an uninitialized (i.e.
* preallocated).
* EXT_UNINIT_MAX_LEN is the maximum number of blocks we can have in an
* uninitialized extent.
* If ee_len is <= 0x8000, it is an initialized extent. Otherwise, it is an
* uninitialized one. In other words, if MSB of ee_len is set, it is an
* uninitialized extent with only one special scenario when ee_len = 0x8000.
* In this case we can not have an uninitialized extent of zero length and
* thus we make it as a special case of initialized extent with 0x8000 length.
* This way we get better extent-to-group alignment for initialized extents.
* Hence, the maximum number of blocks we can have in an *initialized*
* extent is 2^15 (32768) and in an *uninitialized* extent is 2^15-1 (32767).
*/
#define EXT_INIT_MAX_LEN (1UL << 15)
#define EXT_UNINIT_MAX_LEN (EXT_INIT_MAX_LEN - 1)
#define EXT_FIRST_EXTENT(__hdr__) \
((struct ext3_extent *) (((char *) (__hdr__)) + \
sizeof(struct ext3_extent_header)))
#define EXT_FIRST_INDEX(__hdr__) \
((struct ext3_extent_idx *) (((char *) (__hdr__)) + \
sizeof(struct ext3_extent_header)))
#define EXT_HAS_FREE_INDEX(__path__) \
((__path__)->p_hdr->eh_entries < (__path__)->p_hdr->eh_max)
#define EXT_LAST_EXTENT(__hdr__) \
(EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_entries - 1)
#define EXT_LAST_INDEX(__hdr__) \
(EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_entries - 1)
#define EXT_MAX_EXTENT(__hdr__) \
(EXT_FIRST_EXTENT((__hdr__)) + (__hdr__)->eh_max - 1)
#define EXT_MAX_INDEX(__hdr__) \
(EXT_FIRST_INDEX((__hdr__)) + (__hdr__)->eh_max - 1)
#endif /* _LINUX_EXT3_EXTENTS */

View File

@ -1,23 +0,0 @@
#ifndef _MEM_ALLOCATE_H
#define _MEM_ALLOCATE_H
#include <malloc.h>
#include "memory/mem2.h"
extern __inline__ void* mem_alloc (size_t size) {
return MEM2_alloc(size);
}
extern __inline__ void* mem_realloc (void *p, size_t size) {
return MEM2_realloc(p, size);
}
extern __inline__ void* mem_align (size_t a, size_t size) {
return MEM2_alloc(size);
}
extern __inline__ void mem_free (void* mem) {
MEM2_free(mem);
}
#endif /* _MEM_ALLOCATE_H */

View File

@ -1,57 +0,0 @@
/*
bit_ops.h
Functions for dealing with conversion of data between types
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _BIT_OPS_H
#define _BIT_OPS_H
#include <stdint.h>
/*-----------------------------------------------------------------
Functions to deal with little endian values stored in uint8_t arrays
-----------------------------------------------------------------*/
static inline uint16_t u8array_to_u16 (const uint8_t* item, int offset) {
return ( item[offset] | (item[offset + 1] << 8));
}
static inline uint32_t u8array_to_u32 (const uint8_t* item, int offset) {
return ( item[offset] | (item[offset + 1] << 8) | (item[offset + 2] << 16) | (item[offset + 3] << 24));
}
static inline void u16_to_u8array (uint8_t* item, int offset, uint16_t value) {
item[offset] = (uint8_t) value;
item[offset + 1] = (uint8_t)(value >> 8);
}
static inline void u32_to_u8array (uint8_t* item, int offset, uint32_t value) {
item[offset] = (uint8_t) value;
item[offset + 1] = (uint8_t)(value >> 8);
item[offset + 2] = (uint8_t)(value >> 16);
item[offset + 3] = (uint8_t)(value >> 24);
}
#endif // _BIT_OPS_H

View File

@ -1,130 +0,0 @@
/*
cache.h
The cache is not visible to the user. It should be flushed
when any file is closed or changes are made to the filesystem.
This cache implements a least-used-page replacement policy. This will
distribute sectors evenly over the pages, so if less than the maximum
pages are used at once, they should all eventually remain in the cache.
This also has the benefit of throwing out old sectors, so as not to keep
too many stale pages around.
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _CACHE_H
#define _CACHE_H
#include "common.h"
#include "disc.h"
#define PAGE_SECTORS 64
#define CACHE_PAGE_SIZE (BYTES_PER_READ * PAGE_SECTORS)
typedef struct {
sec_t sector;
unsigned int count;
unsigned int last_access;
bool dirty;
uint8_t* cache;
} CACHE_ENTRY;
typedef struct {
const DISC_INTERFACE* disc;
sec_t endOfPartition;
unsigned int numberOfPages;
unsigned int sectorsPerPage;
CACHE_ENTRY* cacheEntries;
} CACHE;
/*
Read data from a sector in the cache
If the sector is not in the cache, it will be swapped in
offset is the position to start reading from
size is the amount of data to read
Precondition: offset + size <= BYTES_PER_READ
*/
bool _FAT_cache_readPartialSector (CACHE* cache, void* buffer, sec_t sector, unsigned int offset, size_t size);
bool _FAT_cache_readLittleEndianValue (CACHE* cache, uint32_t *value, sec_t sector, unsigned int offset, int num_bytes);
/*
Write data to a sector in the cache
If the sector is not in the cache, it will be swapped in.
When the sector is swapped out, the data will be written to the disc
offset is the position to start writing to
size is the amount of data to write
Precondition: offset + size <= BYTES_PER_READ
*/
bool _FAT_cache_writePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size);
bool _FAT_cache_writeLittleEndianValue (CACHE* cache, const uint32_t value, sec_t sector, unsigned int offset, int num_bytes);
/*
Write data to a sector in the cache, zeroing the sector first
If the sector is not in the cache, it will be swapped in.
When the sector is swapped out, the data will be written to the disc
offset is the position to start writing to
size is the amount of data to write
Precondition: offset + size <= BYTES_PER_READ
*/
bool _FAT_cache_eraseWritePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size);
/*
Read several sectors from the cache
*/
bool _FAT_cache_readSectors (CACHE* cache, sec_t sector, sec_t numSectors, void* buffer);
/*
Read a full sector from the cache
*/
static inline bool _FAT_cache_readSector (CACHE* cache, void* buffer, sec_t sector) {
return _FAT_cache_readPartialSector (cache, buffer, sector, 0, BYTES_PER_READ);
}
/*
Write a full sector to the cache
*/
static inline bool _FAT_cache_writeSector (CACHE* cache, const void* buffer, sec_t sector) {
return _FAT_cache_writePartialSector (cache, buffer, sector, 0, BYTES_PER_READ);
}
bool _FAT_cache_writeSectors (CACHE* cache, sec_t sector, sec_t numSectors, const void* buffer);
/*
Write any dirty sectors back to disc and clear out the contents of the cache
*/
bool _FAT_cache_flush (CACHE* cache);
/*
Clear out the contents of the cache without writing any dirty sectors first
*/
void _FAT_cache_invalidate (CACHE* cache);
CACHE* _FAT_cache_constructor (unsigned int numberOfPages, unsigned int sectorsPerPage, const DISC_INTERFACE* discInterface, sec_t endOfPartition);
void _FAT_cache_destructor (CACHE* cache);
#endif // _CACHE_H

View File

@ -1,79 +0,0 @@
/*
common.h
Common definitions and included files for the FATlib
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _COMMON_H
#define _COMMON_H
#define BYTES_PER_READ 512
#include <fat.h>
#include <stddef.h>
#include <stdint.h>
// When compiling for NDS, make sure NDS is defined
#ifndef NDS
#if defined ARM9 || defined ARM7
#define NDS
#endif
#endif
// Platform specific includes
#if defined(__gamecube__) || defined (__wii__)
#include <gctypes.h>
#include <ogc/disc_io.h>
#include <gccore.h>
#elif defined(NDS)
#include <nds/ndstypes.h>
#include <nds/system.h>
#include <nds/disc_io.h>
#elif defined(GBA)
#include <gba_types.h>
#include <disc_io.h>
#endif
// Platform specific options
#if defined (__wii__)
#define DEFAULT_CACHE_PAGES 4
#define DEFAULT_SECTORS_PAGE 64
#define USE_LWP_LOCK
#define USE_RTC_TIME
#elif defined (__gamecube__)
#define DEFAULT_CACHE_PAGES 4
#define DEFAULT_SECTORS_PAGE 64
#define USE_LWP_LOCK
#define USE_RTC_TIME
#elif defined (NDS)
#define DEFAULT_CACHE_PAGES 4
#define DEFAULT_SECTORS_PAGE 8
#define USE_RTC_TIME
#elif defined (GBA)
#define DEFAULT_CACHE_PAGES 2
#define DEFAULT_SECTORS_PAGE 8
#define LIMIT_SECTORS 128
#endif
#endif // _COMMON_H

File diff suppressed because it is too large Load Diff

View File

@ -1,178 +0,0 @@
/*
directory.h
Reading, writing and manipulation of the directory structure on
a FAT partition
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _DIRECTORY_H
#define _DIRECTORY_H
#include <sys/stat.h>
#include "common.h"
#include "partition.h"
#define DIR_ENTRY_DATA_SIZE 0x20
#define MAX_LFN_LENGTH 256
#define MAX_FILENAME_LENGTH 768 // 256 UCS-2 characters encoded into UTF-8 can use up to 768 UTF-8 chars
#define MAX_ALIAS_LENGTH 13
#define LFN_ENTRY_LENGTH 13
#define ALIAS_ENTRY_LENGTH 11
#define MAX_ALIAS_EXT_LENGTH 3
#define MAX_ALIAS_PRI_LENGTH 8
#define MAX_NUMERIC_TAIL 999999
#define FAT16_ROOT_DIR_CLUSTER 0
#define DIR_SEPARATOR '/'
// File attributes
#define ATTRIB_ARCH 0x20 // Archive
#define ATTRIB_DIR 0x10 // Directory
#define ATTRIB_LFN 0x0F // Long file name
#define ATTRIB_VOL 0x08 // Volume
#define ATTRIB_SYS 0x04 // System
#define ATTRIB_HID 0x02 // Hidden
#define ATTRIB_RO 0x01 // Read only
typedef enum {FT_DIRECTORY, FT_FILE} FILE_TYPE;
typedef struct {
uint32_t cluster;
sec_t sector;
int32_t offset;
} DIR_ENTRY_POSITION;
typedef struct {
uint8_t entryData[DIR_ENTRY_DATA_SIZE];
DIR_ENTRY_POSITION dataStart; // Points to the start of the LFN entries of a file, or the alias for no LFN
DIR_ENTRY_POSITION dataEnd; // Always points to the file/directory's alias entry
char filename[MAX_FILENAME_LENGTH];
} DIR_ENTRY;
// Directory entry offsets
enum DIR_ENTRY_offset {
DIR_ENTRY_name = 0x00,
DIR_ENTRY_extension = 0x08,
DIR_ENTRY_attributes = 0x0B,
DIR_ENTRY_reserved = 0x0C,
DIR_ENTRY_cTime_ms = 0x0D,
DIR_ENTRY_cTime = 0x0E,
DIR_ENTRY_cDate = 0x10,
DIR_ENTRY_aDate = 0x12,
DIR_ENTRY_clusterHigh = 0x14,
DIR_ENTRY_mTime = 0x16,
DIR_ENTRY_mDate = 0x18,
DIR_ENTRY_cluster = 0x1A,
DIR_ENTRY_fileSize = 0x1C
};
/*
Returns true if the file specified by entry is a directory
*/
static inline bool _FAT_directory_isDirectory (DIR_ENTRY* entry) {
return ((entry->entryData[DIR_ENTRY_attributes] & ATTRIB_DIR) != 0);
}
static inline bool _FAT_directory_isWritable (DIR_ENTRY* entry) {
return ((entry->entryData[DIR_ENTRY_attributes] & ATTRIB_RO) == 0);
}
static inline bool _FAT_directory_isDot (DIR_ENTRY* entry) {
return ((entry->filename[0] == '.') && ((entry->filename[1] == '\0') ||
((entry->filename[1] == '.') && entry->filename[2] == '\0')));
}
/*
Reads the first directory entry from the directory starting at dirCluster
Places result in entry
entry will be destroyed even if no directory entry is found
Returns true on success, false on failure
*/
bool _FAT_directory_getFirstEntry (PARTITION* partition, DIR_ENTRY* entry, uint32_t dirCluster);
/*
Reads the next directory entry after the one already pointed to by entry
Places result in entry
entry will be destroyed even if no directory entry is found
Returns true on success, false on failure
*/
bool _FAT_directory_getNextEntry (PARTITION* partition, DIR_ENTRY* entry);
/*
Gets the directory entry corrsponding to the supplied path
entry will be destroyed even if no directory entry is found
pathEnd specifies the end of the path string, for cutting strings short if needed
specify NULL to use the full length of path
pathEnd is only a suggestion, and the path string will be searched up until the next PATH_SEPARATOR
after pathEND.
Returns true on success, false on failure
*/
bool _FAT_directory_entryFromPath (PARTITION* partition, DIR_ENTRY* entry, const char* path, const char* pathEnd);
/*
Changes the current directory to the one specified by path
Returns true on success, false on failure
*/
bool _FAT_directory_chdir (PARTITION* partition, const char* path);
/*
Removes the directory entry specified by entry
Assumes that entry is valid
Returns true on success, false on failure
*/
bool _FAT_directory_removeEntry (PARTITION* partition, DIR_ENTRY* entry);
/*
Add a directory entry to the directory specified by dirCluster
The fileData, dataStart and dataEnd elements of the DIR_ENTRY struct are
updated with the new directory entry position and alias.
Returns true on success, false on failure
*/
bool _FAT_directory_addEntry (PARTITION* partition, DIR_ENTRY* entry, uint32_t dirCluster);
/*
Get the start cluster of a file from it's entry data
*/
uint32_t _FAT_directory_entryGetCluster (PARTITION* partition, const uint8_t* entryData);
/*
Fill in the file name and entry data of DIR_ENTRY* entry.
Assumes that the entry's dataStart and dataEnd are correct
Returns true on success, false on failure
*/
bool _FAT_directory_entryFromPosition (PARTITION* partition, DIR_ENTRY* entry);
/*
Fill in a stat struct based on a file entry
*/
void _FAT_directory_entryStat (PARTITION* partition, DIR_ENTRY* entry, struct stat *st);
/*
Get volume label
*/
bool _FAT_directory_getVolumeLabel (PARTITION* partition, char *label);
#endif // _DIRECTORY_H

View File

@ -1,110 +0,0 @@
/*
disc.h
Interface to the low level disc functions. Used by the higher level
file system code.
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _DISC_H
#define _DISC_H
#include "common.h"
/*
A list of all default devices to try at startup,
terminated by a {NULL,NULL} entry.
*/
typedef struct {
const char* name;
const DISC_INTERFACE* (*getInterface)(void);
} INTERFACE_ID;
extern const INTERFACE_ID _FAT_disc_interfaces[];
/*
Check if a disc is inserted
Return true if a disc is inserted and ready, false otherwise
*/
static inline bool _FAT_disc_isInserted (const DISC_INTERFACE* disc) {
return disc->isInserted();
}
/*
Read numSectors sectors from a disc, starting at sector.
numSectors is between 1 and LIMIT_SECTORS if LIMIT_SECTORS is defined,
else it is at least 1
sector is 0 or greater
buffer is a pointer to the memory to fill
*/
static inline bool _FAT_disc_readSectors (const DISC_INTERFACE* disc, sec_t sector, sec_t numSectors, void* buffer) {
return disc->readSectors (sector, numSectors, buffer);
}
/*
Write numSectors sectors to a disc, starting at sector.
numSectors is between 1 and LIMIT_SECTORS if LIMIT_SECTORS is defined,
else it is at least 1
sector is 0 or greater
buffer is a pointer to the memory to read from
*/
static inline bool _FAT_disc_writeSectors (const DISC_INTERFACE* disc, sec_t sector, sec_t numSectors, const void* buffer) {
return disc->writeSectors (sector, numSectors, buffer);
}
/*
Reset the card back to a ready state
*/
static inline bool _FAT_disc_clearStatus (const DISC_INTERFACE* disc) {
return disc->clearStatus();
}
/*
Initialise the disc to a state ready for data reading or writing
*/
static inline bool _FAT_disc_startup (const DISC_INTERFACE* disc) {
return disc->startup();
}
/*
Put the disc in a state ready for power down.
Complete any pending writes and disable the disc if necessary
*/
static inline bool _FAT_disc_shutdown (const DISC_INTERFACE* disc) {
return disc->shutdown();
}
/*
Return a 32 bit value unique to each type of interface
*/
static inline uint32_t _FAT_disc_hostType (const DISC_INTERFACE* disc) {
return disc->ioType;
}
/*
Return a 32 bit value that specifies the capabilities of the disc
*/
static inline uint32_t _FAT_disc_features (const DISC_INTERFACE* disc) {
return disc->features;
}
#endif // _DISC_H

View File

@ -1,104 +0,0 @@
/*
fat.h
Simple functionality for startup, mounting and unmounting of FAT-based devices.
Copyright (c) 2006 - 2009
Michael "Chishm" Chisholm
Dave "WinterMute" Murphy
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LIBFAT_H
#define _LIBFAT_H
#ifdef __cplusplus
extern "C" {
#endif
// When compiling for NDS, make sure NDS is defined
#ifndef NDS
#if defined ARM9 || defined ARM7
#define NDS
#endif
#endif
#include <stdint.h>
#if defined(__gamecube__) || defined (__wii__)
# include <ogc/disc_io.h>
#else
# ifdef NDS
# include "nds/disc_io.h"
# else
# include "disc_io.h"
# endif
#endif
/*
Initialise any inserted block-devices.
Add the fat device driver to the devoptab, making it available for standard file functions.
cacheSize: The number of pages to allocate for each inserted block-device
setAsDefaultDevice: if true, make this the default device driver for file operations
*/
extern bool fatInit (uint32_t cacheSize, bool setAsDefaultDevice);
/*
Calls fatInit with setAsDefaultDevice = true and cacheSize optimised for the host system.
*/
extern bool fatInitDefault (void);
/*
Mount the device pointed to by interface, and set up a devoptab entry for it as "name:".
You can then access the filesystem using "name:/".
This will mount the active partition or the first valid partition on the disc,
and will use a cache size optimized for the host system.
*/
extern bool fatMountSimple (const char* name, const DISC_INTERFACE* interface);
/*
Mount the device pointed to by interface, and set up a devoptab entry for it as "name:".
You can then access the filesystem using "name:/".
If startSector = 0, it will mount the active partition of the first valid partition on
the disc. Otherwise it will try to mount the partition starting at startSector.
cacheSize specifies the number of pages to allocate for the cache.
This will not startup the disc, so you need to call interface->startup(); first.
*/
extern bool fatMount (const char* name, const DISC_INTERFACE* interface, sec_t startSector, uint32_t cacheSize, uint32_t SectorsPerPage);
/*
Unmount the partition specified by name.
If there are open files, it will attempt to synchronise them to disc.
*/
extern void fatUnmount (const char* name);
/*
Get Volume Label
*/
extern void fatGetVolumeLabel (const char* name, char *label);
#ifdef __cplusplus
}
#endif
#endif // _LIBFAT_H

View File

@ -1,365 +0,0 @@
/*
cache.c
The cache is not visible to the user. It should be flushed
when any file is closed or changes are made to the filesystem.
This cache implements a least-used-page replacement policy. This will
distribute sectors evenly over the pages, so if less than the maximum
pages are used at once, they should all eventually remain in the cache.
This also has the benefit of throwing out old sectors, so as not to keep
too many stale pages around.
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <string.h>
#include <limits.h>
#include "common.h"
#include "cache.h"
#include "disc.h"
#include "mem_allocate.h"
#include "bit_ops.h"
#include "file_allocation_table.h"
#define CACHE_FREE UINT_MAX
CACHE* _FAT_cache_constructor (unsigned int numberOfPages, unsigned int sectorsPerPage, const DISC_INTERFACE* discInterface, sec_t endOfPartition) {
CACHE* cache;
unsigned int i;
CACHE_ENTRY* cacheEntries;
if (numberOfPages < 2) {
numberOfPages = 2;
}
if (sectorsPerPage < 8) {
sectorsPerPage = 8;
}
cache = (CACHE*) _FAT_mem_allocate (sizeof(CACHE));
if (cache == NULL) {
return NULL;
}
cache->disc = discInterface;
cache->endOfPartition = endOfPartition;
cache->numberOfPages = numberOfPages;
cache->sectorsPerPage = sectorsPerPage;
cacheEntries = (CACHE_ENTRY*) _FAT_mem_allocate ( sizeof(CACHE_ENTRY) * numberOfPages);
if (cacheEntries == NULL) {
_FAT_mem_free (cache);
return NULL;
}
for (i = 0; i < numberOfPages; i++) {
cacheEntries[i].sector = CACHE_FREE;
cacheEntries[i].count = 0;
cacheEntries[i].last_access = 0;
cacheEntries[i].dirty = false;
cacheEntries[i].cache = (uint8_t*) _FAT_mem_align ( sectorsPerPage * BYTES_PER_READ );
}
cache->cacheEntries = cacheEntries;
return cache;
}
void _FAT_cache_destructor (CACHE* cache) {
unsigned int i;
// Clear out cache before destroying it
_FAT_cache_flush(cache);
// Free memory in reverse allocation order
for (i = 0; i < cache->numberOfPages; i++) {
_FAT_mem_free (cache->cacheEntries[i].cache);
}
_FAT_mem_free (cache->cacheEntries);
_FAT_mem_free (cache);
}
static u32 accessCounter = 0;
static u32 accessTime(){
accessCounter++;
return accessCounter;
}
static CACHE_ENTRY* _FAT_cache_getPage(CACHE *cache,sec_t sector)
{
unsigned int i;
CACHE_ENTRY* cacheEntries = cache->cacheEntries;
unsigned int numberOfPages = cache->numberOfPages;
unsigned int sectorsPerPage = cache->sectorsPerPage;
bool foundFree = false;
unsigned int oldUsed = 0;
unsigned int oldAccess = UINT_MAX;
for(i=0;i<numberOfPages;i++) {
if(sector>=cacheEntries[i].sector && sector<(cacheEntries[i].sector + cacheEntries[i].count)) {
cacheEntries[i].last_access = accessTime();
return &(cacheEntries[i]);
}
if(foundFree==false && (cacheEntries[i].sector==CACHE_FREE || cacheEntries[i].last_access<oldAccess)) {
if(cacheEntries[i].sector==CACHE_FREE) foundFree = true;
oldUsed = i;
oldAccess = cacheEntries[i].last_access;
}
}
if(foundFree==false && cacheEntries[oldUsed].dirty==true) {
if(!_FAT_disc_writeSectors(cache->disc,cacheEntries[oldUsed].sector,cacheEntries[oldUsed].count,cacheEntries[oldUsed].cache)) return NULL;
cacheEntries[oldUsed].dirty = false;
}
sector = (sector/sectorsPerPage)*sectorsPerPage; // align base sector to page size
sec_t next_page = sector + sectorsPerPage;
if(next_page > cache->endOfPartition) next_page = cache->endOfPartition;
if(!_FAT_disc_readSectors(cache->disc,sector,next_page-sector,cacheEntries[oldUsed].cache)) return NULL;
cacheEntries[oldUsed].sector = sector;
cacheEntries[oldUsed].count = next_page-sector;
cacheEntries[oldUsed].last_access = accessTime();
return &(cacheEntries[oldUsed]);
}
bool _FAT_cache_readSectors(CACHE *cache,sec_t sector,sec_t numSectors,void *buffer)
{
sec_t sec;
sec_t secs_to_read;
CACHE_ENTRY *entry;
uint8_t *dest = (uint8_t *)buffer;
while(numSectors>0) {
entry = _FAT_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
secs_to_read = entry->count - sec;
if(secs_to_read>numSectors) secs_to_read = numSectors;
memcpy(dest,entry->cache + (sec*BYTES_PER_READ),(secs_to_read*BYTES_PER_READ));
dest += (secs_to_read*BYTES_PER_READ);
sector += secs_to_read;
numSectors -= secs_to_read;
}
return true;
}
/*
Reads some data from a cache page, determined by the sector number
*/
bool _FAT_cache_readPartialSector (CACHE* cache, void* buffer, sec_t sector, unsigned int offset, size_t size)
{
sec_t sec;
CACHE_ENTRY *entry;
if (offset + size > BYTES_PER_READ) return false;
entry = _FAT_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
memcpy(buffer,entry->cache + ((sec*BYTES_PER_READ) + offset),size);
return true;
}
bool _FAT_cache_readLittleEndianValue (CACHE* cache, uint32_t *value, sec_t sector, unsigned int offset, int num_bytes) {
uint8_t buf[4];
if (!_FAT_cache_readPartialSector(cache, buf, sector, offset, num_bytes)) return false;
switch(num_bytes) {
case 1: *value = buf[0]; break;
case 2: *value = u8array_to_u16(buf,0); break;
case 4: *value = u8array_to_u32(buf,0); break;
default: return false;
}
return true;
}
/*
Writes some data to a cache page, making sure it is loaded into memory first.
*/
bool _FAT_cache_writePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size)
{
sec_t sec;
CACHE_ENTRY *entry;
if (offset + size > BYTES_PER_READ) return false;
entry = _FAT_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
memcpy(entry->cache + ((sec*BYTES_PER_READ) + offset),buffer,size);
entry->dirty = true;
return true;
}
bool _FAT_cache_writeLittleEndianValue (CACHE* cache, const uint32_t value, sec_t sector, unsigned int offset, int size) {
uint8_t buf[4] = {0, 0, 0, 0};
switch(size) {
case 1: buf[0] = value; break;
case 2: u16_to_u8array(buf, 0, value); break;
case 4: u32_to_u8array(buf, 0, value); break;
default: return false;
}
return _FAT_cache_writePartialSector(cache, buf, sector, offset, size);
}
/*
Writes some data to a cache page, zeroing out the page first
*/
bool _FAT_cache_eraseWritePartialSector (CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size)
{
sec_t sec;
CACHE_ENTRY *entry;
if (offset + size > BYTES_PER_READ) return false;
entry = _FAT_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
memset(entry->cache + (sec*BYTES_PER_READ),0,BYTES_PER_READ);
memcpy(entry->cache + ((sec*BYTES_PER_READ) + offset),buffer,size);
entry->dirty = true;
return true;
}
#ifndef GEKKO
static CACHE_ENTRY* _FAT_cache_findPage(CACHE *cache, sec_t sector, sec_t count) {
unsigned int i;
CACHE_ENTRY* cacheEntries = cache->cacheEntries;
unsigned int numberOfPages = cache->numberOfPages;
CACHE_ENTRY *entry = NULL;
sec_t lowest = UINT_MAX;
for(i=0;i<numberOfPages;i++) {
if (cacheEntries[i].sector != CACHE_FREE) {
bool intersect;
if (sector > cacheEntries[i].sector) {
intersect = sector - cacheEntries[i].sector < cacheEntries[i].count;
} else {
intersect = cacheEntries[i].sector - sector < count;
}
if ( intersect && (cacheEntries[i].sector < lowest)) {
lowest = cacheEntries[i].sector;
entry = &cacheEntries[i];
}
}
}
return entry;
}
#endif
bool _FAT_cache_writeSectors (CACHE* cache, sec_t sector, sec_t numSectors, const void* buffer)
{
sec_t sec;
sec_t secs_to_write;
CACHE_ENTRY* entry;
const uint8_t *src = (const uint8_t *)buffer;
while(numSectors>0)
{
#ifdef GEKKO
entry = _FAT_cache_getPage(cache,sector);
if(entry==NULL) return false;
#else
entry = _FAT_cache_findPage(cache,sector,numSectors);
if(entry==NULL)
return _FAT_disc_writeSectors(cache->disc,sector,numSectors,src);
if ( entry->sector > sector) {
secs_to_write = entry->sector - sector;
_FAT_disc_writeSectors(cache->disc,sector,secs_to_write,src);
src += (secs_to_write*BYTES_PER_READ);
sector += secs_to_write;
numSectors -= secs_to_write;
}
#endif
sec = sector - entry->sector;
secs_to_write = entry->count - sec;
if(secs_to_write>numSectors) secs_to_write = numSectors;
memcpy(entry->cache + (sec*BYTES_PER_READ),src,(secs_to_write*BYTES_PER_READ));
src += (secs_to_write*BYTES_PER_READ);
sector += secs_to_write;
numSectors -= secs_to_write;
entry->dirty = true;
}
return true;
}
/*
Flushes all dirty pages to disc, clearing the dirty flag.
*/
bool _FAT_cache_flush (CACHE* cache) {
unsigned int i;
for (i = 0; i < cache->numberOfPages; i++) {
if (cache->cacheEntries[i].dirty) {
if (!_FAT_disc_writeSectors (cache->disc, cache->cacheEntries[i].sector, cache->cacheEntries[i].count, cache->cacheEntries[i].cache)) {
return false;
}
}
cache->cacheEntries[i].dirty = false;
}
return true;
}
void _FAT_cache_invalidate (CACHE* cache) {
unsigned int i;
_FAT_cache_flush(cache);
for (i = 0; i < cache->numberOfPages; i++) {
cache->cacheEntries[i].sector = CACHE_FREE;
cache->cacheEntries[i].last_access = 0;
cache->cacheEntries[i].count = 0;
cache->cacheEntries[i].dirty = false;
}
}

View File

@ -1,105 +0,0 @@
/*
disc.c
Interface to the low level disc functions. Used by the higher level
file system code.
Copyright (c) 2008 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "disc.h"
/*
The list of interfaces consists of a series of name/interface pairs.
The interface is returned via a simple function. This allows for
platforms where the interface has to be "assembled" before it can
be used, like DLDI on the NDS. For cases where a simple struct
is available, wrapper functions are used.
The list is terminated by a NULL/NULL entry.
*/
/* ====================== Wii ====================== */
#if defined (__wii__)
#include <sdcard/wiisd_io.h>
#include <ogc/usbstorage.h>
#include <sdcard/gcsd.h>
static const DISC_INTERFACE* get_io_wiisd (void) {
return &__io_wiisd;
}
static const DISC_INTERFACE* get_io_usbstorage (void) {
return &__io_usbstorage;
}
static const DISC_INTERFACE* get_io_gcsda (void) {
return &__io_gcsda;
}
static const DISC_INTERFACE* get_io_gcsdb (void) {
return &__io_gcsdb;
}
const INTERFACE_ID _FAT_disc_interfaces[] = {
{"sd", get_io_wiisd},
{"usb", get_io_usbstorage},
{"carda", get_io_gcsda},
{"cardb", get_io_gcsdb},
{NULL, NULL}
};
/* ==================== Gamecube ==================== */
#elif defined (__gamecube__)
#include <sdcard/gcsd.h>
static const DISC_INTERFACE* get_io_gcsda (void) {
return &__io_gcsda;
}
static const DISC_INTERFACE* get_io_gcsdb (void) {
return &__io_gcsdb;
}
const INTERFACE_ID _FAT_disc_interfaces[] = {
{"carda", get_io_gcsda},
{"cardb", get_io_gcsdb},
{NULL, NULL}
};
/* ====================== NDS ====================== */
#elif defined (NDS)
#include <nds/arm9/dldi.h>
const INTERFACE_ID _FAT_disc_interfaces[] = {
{"fat", dldiGetInternal},
{NULL, NULL}
};
/* ====================== GBA ====================== */
#elif defined (GBA)
#include <disc.h>
const INTERFACE_ID _FAT_disc_interfaces[] = {
{"fat", discGetInterface},
{NULL, NULL}
};
#endif

View File

@ -1,610 +0,0 @@
/*
fatdir.c
Functions used by the newlib disc stubs to interface with
this library
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/dir.h>
#include "fatdir.h"
#include "cache.h"
#include "file_allocation_table.h"
#include "partition.h"
#include "directory.h"
#include "bit_ops.h"
#include "filetime.h"
#include "lock.h"
int _FAT_stat_r (struct _reent *r, const char *path, struct stat *st) {
PARTITION* partition = NULL;
DIR_ENTRY dirEntry;
// Get the partition this file is on
partition = _FAT_partition_getPartitionFromPath (path);
if (partition == NULL) {
r->_errno = ENODEV;
return -1;
}
// Move the path pointer to the start of the actual path
if (strchr (path, ':') != NULL) {
path = strchr (path, ':') + 1;
}
if (strchr (path, ':') != NULL) {
r->_errno = EINVAL;
return -1;
}
_FAT_lock(&partition->lock);
// Search for the file on the disc
if (!_FAT_directory_entryFromPath (partition, &dirEntry, path, NULL)) {
_FAT_unlock(&partition->lock);
r->_errno = ENOENT;
return -1;
}
// Fill in the stat struct
_FAT_directory_entryStat (partition, &dirEntry, st);
_FAT_unlock(&partition->lock);
return 0;
}
int _FAT_link_r (struct _reent *r, const char *existing, const char *newLink) {
r->_errno = ENOTSUP;
return -1;
}
int _FAT_unlink_r (struct _reent *r, const char *path) {
PARTITION* partition = NULL;
DIR_ENTRY dirEntry;
DIR_ENTRY dirContents;
uint32_t cluster;
bool nextEntry;
bool errorOccured = false;
// Get the partition this directory is on
partition = _FAT_partition_getPartitionFromPath (path);
if (partition == NULL) {
r->_errno = ENODEV;
return -1;
}
// Make sure we aren't trying to write to a read-only disc
if (partition->readOnly) {
r->_errno = EROFS;
return -1;
}
// Move the path pointer to the start of the actual path
if (strchr (path, ':') != NULL) {
path = strchr (path, ':') + 1;
}
if (strchr (path, ':') != NULL) {
r->_errno = EINVAL;
return -1;
}
_FAT_lock(&partition->lock);
// Search for the file on the disc
if (!_FAT_directory_entryFromPath (partition, &dirEntry, path, NULL)) {
_FAT_unlock(&partition->lock);
r->_errno = ENOENT;
return -1;
}
cluster = _FAT_directory_entryGetCluster (partition, dirEntry.entryData);
// If this is a directory, make sure it is empty
if (_FAT_directory_isDirectory (&dirEntry)) {
nextEntry = _FAT_directory_getFirstEntry (partition, &dirContents, cluster);
while (nextEntry) {
if (!_FAT_directory_isDot (&dirContents)) {
// The directory had something in it that isn't a reference to itself or it's parent
_FAT_unlock(&partition->lock);
r->_errno = EPERM;
return -1;
}
nextEntry = _FAT_directory_getNextEntry (partition, &dirContents);
}
}
if (_FAT_fat_isValidCluster(partition, cluster)) {
// Remove the cluster chain for this file
if (!_FAT_fat_clearLinks (partition, cluster)) {
r->_errno = EIO;
errorOccured = true;
}
}
// Remove the directory entry for this file
if (!_FAT_directory_removeEntry (partition, &dirEntry)) {
r->_errno = EIO;
errorOccured = true;
}
// Flush any sectors in the disc cache
if (!_FAT_cache_flush(partition->cache)) {
r->_errno = EIO;
errorOccured = true;
}
_FAT_unlock(&partition->lock);
if (errorOccured) {
return -1;
} else {
return 0;
}
}
int _FAT_chdir_r (struct _reent *r, const char *path) {
PARTITION* partition = NULL;
// Get the partition this directory is on
partition = _FAT_partition_getPartitionFromPath (path);
if (partition == NULL) {
r->_errno = ENODEV;
return -1;
}
// Move the path pointer to the start of the actual path
if (strchr (path, ':') != NULL) {
path = strchr (path, ':') + 1;
}
if (strchr (path, ':') != NULL) {
r->_errno = EINVAL;
return -1;
}
_FAT_lock(&partition->lock);
// Try changing directory
if (_FAT_directory_chdir (partition, path)) {
// Successful
_FAT_unlock(&partition->lock);
return 0;
} else {
// Failed
_FAT_unlock(&partition->lock);
r->_errno = ENOTDIR;
return -1;
}
}
int _FAT_rename_r (struct _reent *r, const char *oldName, const char *newName) {
PARTITION* partition = NULL;
DIR_ENTRY oldDirEntry;
DIR_ENTRY newDirEntry;
const char *pathEnd;
uint32_t dirCluster;
// Get the partition this directory is on
partition = _FAT_partition_getPartitionFromPath (oldName);
if (partition == NULL) {
r->_errno = ENODEV;
return -1;
}
_FAT_lock(&partition->lock);
// Make sure the same partition is used for the old and new names
if (partition != _FAT_partition_getPartitionFromPath (newName)) {
_FAT_unlock(&partition->lock);
r->_errno = EXDEV;
return -1;
}
// Make sure we aren't trying to write to a read-only disc
if (partition->readOnly) {
_FAT_unlock(&partition->lock);
r->_errno = EROFS;
return -1;
}
// Move the path pointer to the start of the actual path
if (strchr (oldName, ':') != NULL) {
oldName = strchr (oldName, ':') + 1;
}
if (strchr (oldName, ':') != NULL) {
_FAT_unlock(&partition->lock);
r->_errno = EINVAL;
return -1;
}
if (strchr (newName, ':') != NULL) {
newName = strchr (newName, ':') + 1;
}
if (strchr (newName, ':') != NULL) {
_FAT_unlock(&partition->lock);
r->_errno = EINVAL;
return -1;
}
// Search for the file on the disc
if (!_FAT_directory_entryFromPath (partition, &oldDirEntry, oldName, NULL)) {
_FAT_unlock(&partition->lock);
r->_errno = ENOENT;
return -1;
}
// Make sure there is no existing file / directory with the new name
if (_FAT_directory_entryFromPath (partition, &newDirEntry, newName, NULL)) {
_FAT_unlock(&partition->lock);
r->_errno = EEXIST;
return -1;
}
// Create the new file entry
// Get the directory it has to go in
pathEnd = strrchr (newName, DIR_SEPARATOR);
if (pathEnd == NULL) {
// No path was specified
dirCluster = partition->cwdCluster;
pathEnd = newName;
} else {
// Path was specified -- get the right dirCluster
// Recycling newDirEntry, since it needs to be recreated anyway
if (!_FAT_directory_entryFromPath (partition, &newDirEntry, newName, pathEnd) ||
!_FAT_directory_isDirectory(&newDirEntry)) {
_FAT_unlock(&partition->lock);
r->_errno = ENOTDIR;
return -1;
}
dirCluster = _FAT_directory_entryGetCluster (partition, newDirEntry.entryData);
// Move the pathEnd past the last DIR_SEPARATOR
pathEnd += 1;
}
// Copy the entry data
memcpy (&newDirEntry, &oldDirEntry, sizeof(DIR_ENTRY));
// Set the new name
strncpy (newDirEntry.filename, pathEnd, MAX_FILENAME_LENGTH - 1);
// Write the new entry
if (!_FAT_directory_addEntry (partition, &newDirEntry, dirCluster)) {
_FAT_unlock(&partition->lock);
r->_errno = ENOSPC;
return -1;
}
// Remove the old entry
if (!_FAT_directory_removeEntry (partition, &oldDirEntry)) {
_FAT_unlock(&partition->lock);
r->_errno = EIO;
return -1;
}
// Flush any sectors in the disc cache
if (!_FAT_cache_flush (partition->cache)) {
_FAT_unlock(&partition->lock);
r->_errno = EIO;
return -1;
}
_FAT_unlock(&partition->lock);
return 0;
}
int _FAT_mkdir_r (struct _reent *r, const char *path, int mode) {
PARTITION* partition = NULL;
bool fileExists;
DIR_ENTRY dirEntry;
const char* pathEnd;
uint32_t parentCluster, dirCluster;
uint8_t newEntryData[DIR_ENTRY_DATA_SIZE];
partition = _FAT_partition_getPartitionFromPath (path);
if (partition == NULL) {
r->_errno = ENODEV;
return -1;
}
// Move the path pointer to the start of the actual path
if (strchr (path, ':') != NULL) {
path = strchr (path, ':') + 1;
}
if (strchr (path, ':') != NULL) {
r->_errno = EINVAL;
return -1;
}
_FAT_lock(&partition->lock);
// Search for the file/directory on the disc
fileExists = _FAT_directory_entryFromPath (partition, &dirEntry, path, NULL);
// Make sure it doesn't exist
if (fileExists) {
_FAT_unlock(&partition->lock);
r->_errno = EEXIST;
return -1;
}
if (partition->readOnly) {
// We can't write to a read-only partition
_FAT_unlock(&partition->lock);
r->_errno = EROFS;
return -1;
}
// Get the directory it has to go in
pathEnd = strrchr (path, DIR_SEPARATOR);
if (pathEnd == NULL) {
// No path was specified
parentCluster = partition->cwdCluster;
pathEnd = path;
} else {
// Path was specified -- get the right parentCluster
// Recycling dirEntry, since it needs to be recreated anyway
if (!_FAT_directory_entryFromPath (partition, &dirEntry, path, pathEnd) ||
!_FAT_directory_isDirectory(&dirEntry)) {
_FAT_unlock(&partition->lock);
r->_errno = ENOTDIR;
return -1;
}
parentCluster = _FAT_directory_entryGetCluster (partition, dirEntry.entryData);
// Move the pathEnd past the last DIR_SEPARATOR
pathEnd += 1;
}
// Create the entry data
strncpy (dirEntry.filename, pathEnd, MAX_FILENAME_LENGTH - 1);
memset (dirEntry.entryData, 0, DIR_ENTRY_DATA_SIZE);
// Set the creation time and date
dirEntry.entryData[DIR_ENTRY_cTime_ms] = 0;
u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cTime, _FAT_filetime_getTimeFromRTC());
u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cDate, _FAT_filetime_getDateFromRTC());
u16_to_u8array (dirEntry.entryData, DIR_ENTRY_mTime, _FAT_filetime_getTimeFromRTC());
u16_to_u8array (dirEntry.entryData, DIR_ENTRY_mDate, _FAT_filetime_getDateFromRTC());
u16_to_u8array (dirEntry.entryData, DIR_ENTRY_aDate, _FAT_filetime_getDateFromRTC());
// Set the directory attribute
dirEntry.entryData[DIR_ENTRY_attributes] = ATTRIB_DIR;
// Get a cluster for the new directory
dirCluster = _FAT_fat_linkFreeClusterCleared (partition, CLUSTER_FREE);
if (!_FAT_fat_isValidCluster(partition, dirCluster)) {
// No space left on disc for the cluster
_FAT_unlock(&partition->lock);
r->_errno = ENOSPC;
return -1;
}
u16_to_u8array (dirEntry.entryData, DIR_ENTRY_cluster, dirCluster);
u16_to_u8array (dirEntry.entryData, DIR_ENTRY_clusterHigh, dirCluster >> 16);
// Write the new directory's entry to it's parent
if (!_FAT_directory_addEntry (partition, &dirEntry, parentCluster)) {
_FAT_unlock(&partition->lock);
r->_errno = ENOSPC;
return -1;
}
// Create the dot entry within the directory
memset (newEntryData, 0, DIR_ENTRY_DATA_SIZE);
memset (newEntryData, ' ', 11);
newEntryData[DIR_ENTRY_name] = '.';
newEntryData[DIR_ENTRY_attributes] = ATTRIB_DIR;
u16_to_u8array (newEntryData, DIR_ENTRY_cluster, dirCluster);
u16_to_u8array (newEntryData, DIR_ENTRY_clusterHigh, dirCluster >> 16);
// Write it to the directory, erasing that sector in the process
_FAT_cache_eraseWritePartialSector ( partition->cache, newEntryData,
_FAT_fat_clusterToSector (partition, dirCluster), 0, DIR_ENTRY_DATA_SIZE);
// Create the double dot entry within the directory
// if ParentDir == Rootdir then ".."" always link to Cluster 0
if(parentCluster == partition->rootDirCluster)
parentCluster = FAT16_ROOT_DIR_CLUSTER;
newEntryData[DIR_ENTRY_name + 1] = '.';
u16_to_u8array (newEntryData, DIR_ENTRY_cluster, parentCluster);
u16_to_u8array (newEntryData, DIR_ENTRY_clusterHigh, parentCluster >> 16);
// Write it to the directory
_FAT_cache_writePartialSector ( partition->cache, newEntryData,
_FAT_fat_clusterToSector (partition, dirCluster), DIR_ENTRY_DATA_SIZE, DIR_ENTRY_DATA_SIZE);
// Flush any sectors in the disc cache
if (!_FAT_cache_flush(partition->cache)) {
_FAT_unlock(&partition->lock);
r->_errno = EIO;
return -1;
}
_FAT_unlock(&partition->lock);
return 0;
}
int _FAT_statvfs_r (struct _reent *r, const char *path, struct statvfs *buf)
{
PARTITION* partition = NULL;
unsigned int freeClusterCount;
// Get the partition of the requested path
partition = _FAT_partition_getPartitionFromPath (path);
if (partition == NULL) {
r->_errno = ENODEV;
return -1;
}
_FAT_lock(&partition->lock);
freeClusterCount = _FAT_fat_freeClusterCount (partition);
// FAT clusters = POSIX blocks
buf->f_bsize = partition->bytesPerCluster; // File system block size.
buf->f_frsize = partition->bytesPerCluster; // Fundamental file system block size.
buf->f_blocks = partition->fat.lastCluster - CLUSTER_FIRST + 1; // Total number of blocks on file system in units of f_frsize.
buf->f_bfree = freeClusterCount; // Total number of free blocks.
buf->f_bavail = freeClusterCount; // Number of free blocks available to non-privileged process.
// Treat requests for info on inodes as clusters
buf->f_files = partition->fat.lastCluster - CLUSTER_FIRST + 1; // Total number of file serial numbers.
buf->f_ffree = freeClusterCount; // Total number of free file serial numbers.
buf->f_favail = freeClusterCount; // Number of file serial numbers available to non-privileged process.
// File system ID. 32bit ioType value
buf->f_fsid = _FAT_disc_hostType(partition->disc);
// Bit mask of f_flag values.
buf->f_flag = ST_NOSUID /* No support for ST_ISUID and ST_ISGID file mode bits */
| (partition->readOnly ? ST_RDONLY /* Read only file system */ : 0 ) ;
// Maximum filename length.
buf->f_namemax = MAX_FILENAME_LENGTH;
_FAT_unlock(&partition->lock);
return 0;
}
DIR_ITER* _FAT_diropen_r(struct _reent *r, DIR_ITER *dirState, const char *path) {
DIR_ENTRY dirEntry;
DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct);
bool fileExists;
state->partition = _FAT_partition_getPartitionFromPath (path);
if (state->partition == NULL) {
r->_errno = ENODEV;
return NULL;
}
// Move the path pointer to the start of the actual path
if (strchr (path, ':') != NULL) {
path = strchr (path, ':') + 1;
}
if (strchr (path, ':') != NULL) {
r->_errno = EINVAL;
return NULL;
}
_FAT_lock(&state->partition->lock);
// Get the start cluster of the directory
fileExists = _FAT_directory_entryFromPath (state->partition, &dirEntry, path, NULL);
if (!fileExists) {
_FAT_unlock(&state->partition->lock);
r->_errno = ENOENT;
return NULL;
}
// Make sure it is a directory
if (! _FAT_directory_isDirectory (&dirEntry)) {
_FAT_unlock(&state->partition->lock);
r->_errno = ENOTDIR;
return NULL;
}
// Save the start cluster for use when resetting the directory data
state->startCluster = _FAT_directory_entryGetCluster (state->partition, dirEntry.entryData);
// Get the first entry for use with a call to dirnext
state->validEntry =
_FAT_directory_getFirstEntry (state->partition, &(state->currentEntry), state->startCluster);
// We are now using this entry
state->inUse = true;
_FAT_unlock(&state->partition->lock);
return (DIR_ITER*) state;
}
int _FAT_dirreset_r (struct _reent *r, DIR_ITER *dirState) {
DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct);
_FAT_lock(&state->partition->lock);
// Make sure we are still using this entry
if (!state->inUse) {
_FAT_unlock(&state->partition->lock);
r->_errno = EBADF;
return -1;
}
// Get the first entry for use with a call to dirnext
state->validEntry =
_FAT_directory_getFirstEntry (state->partition, &(state->currentEntry), state->startCluster);
_FAT_unlock(&state->partition->lock);
return 0;
}
int _FAT_dirnext_r (struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *filestat) {
DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct);
_FAT_lock(&state->partition->lock);
// Make sure we are still using this entry
if (!state->inUse) {
_FAT_unlock(&state->partition->lock);
r->_errno = EBADF;
return -1;
}
// Make sure there is another file to report on
if (! state->validEntry) {
_FAT_unlock(&state->partition->lock);
r->_errno = ENOENT;
return -1;
}
// Get the filename
strncpy (filename, state->currentEntry.filename, MAX_FILENAME_LENGTH);
// Get the stats, if requested
if (filestat != NULL) {
_FAT_directory_entryStat (state->partition, &(state->currentEntry), filestat);
}
// Look for the next entry for use next time
state->validEntry =
_FAT_directory_getNextEntry (state->partition, &(state->currentEntry));
_FAT_unlock(&state->partition->lock);
return 0;
}
int _FAT_dirclose_r (struct _reent *r, DIR_ITER *dirState) {
DIR_STATE_STRUCT* state = (DIR_STATE_STRUCT*) (dirState->dirStruct);
// We are no longer using this entry
_FAT_lock(&state->partition->lock);
state->inUse = false;
_FAT_unlock(&state->partition->lock);
return 0;
}

View File

@ -1,73 +0,0 @@
/*
fatdir.h
Functions used by the newlib disc stubs to interface with
this library
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _FATDIR_H
#define _FATDIR_H
#include <sys/reent.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <sys/iosupport.h>
#include "common.h"
#include "directory.h"
typedef struct {
PARTITION* partition;
DIR_ENTRY currentEntry;
uint32_t startCluster;
bool inUse;
bool validEntry;
} DIR_STATE_STRUCT;
extern int _FAT_stat_r (struct _reent *r, const char *path, struct stat *st);
extern int _FAT_link_r (struct _reent *r, const char *existing, const char *newLink);
extern int _FAT_unlink_r (struct _reent *r, const char *name);
extern int _FAT_chdir_r (struct _reent *r, const char *name);
extern int _FAT_rename_r (struct _reent *r, const char *oldName, const char *newName);
extern int _FAT_mkdir_r (struct _reent *r, const char *path, int mode);
extern int _FAT_statvfs_r (struct _reent *r, const char *path, struct statvfs *buf);
/*
Directory iterator functions
*/
extern DIR_ITER* _FAT_diropen_r(struct _reent *r, DIR_ITER *dirState, const char *path);
extern int _FAT_dirreset_r (struct _reent *r, DIR_ITER *dirState);
extern int _FAT_dirnext_r (struct _reent *r, DIR_ITER *dirState, char *filename, struct stat *filestat);
extern int _FAT_dirclose_r (struct _reent *r, DIR_ITER *dirState);
#endif // _FATDIR_H

File diff suppressed because it is too large Load Diff

View File

@ -1,105 +0,0 @@
/*
fatfile.h
Functions used by the newlib disc stubs to interface with
this library
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _FATFILE_H
#define _FATFILE_H
#include <sys/reent.h>
#include <sys/stat.h>
#include "common.h"
#include "partition.h"
#include "directory.h"
#define FILE_MAX_SIZE ((uint32_t)0xFFFFFFFF) // 4GiB - 1B
typedef struct {
u32 cluster;
sec_t sector;
s32 byte;
} FILE_POSITION;
struct _FILE_STRUCT;
struct _FILE_STRUCT {
uint32_t filesize;
uint32_t startCluster;
uint32_t currentPosition;
FILE_POSITION rwPosition;
FILE_POSITION appendPosition;
DIR_ENTRY_POSITION dirEntryStart; // Points to the start of the LFN entries of a file, or the alias for no LFN
DIR_ENTRY_POSITION dirEntryEnd; // Always points to the file's alias entry
PARTITION* partition;
struct _FILE_STRUCT* prevOpenFile; // The previous entry in a double-linked list of open files
struct _FILE_STRUCT* nextOpenFile; // The next entry in a double-linked list of open files
bool read;
bool write;
bool append;
bool inUse;
bool modified;
};
typedef struct _FILE_STRUCT FILE_STRUCT;
int _FAT_open_r (struct _reent *r, void *fileStruct, const char *path, int flags, int mode);
int _FAT_close_r (struct _reent *r, int fd);
ssize_t _FAT_write_r (struct _reent *r,int fd, const char *ptr, size_t len);
ssize_t _FAT_read_r (struct _reent *r, int fd, char *ptr, size_t len);
off_t _FAT_seek_r (struct _reent *r, int fd, off_t pos, int dir);
int _FAT_fstat_r (struct _reent *r, int fd, struct stat *st);
int _FAT_stat_r (struct _reent *r, const char *path, struct stat *st);
int _FAT_link_r (struct _reent *r, const char *existing, const char *newLink);
int _FAT_unlink_r (struct _reent *r, const char *name);
int _FAT_chdir_r (struct _reent *r, const char *name);
int _FAT_rename_r (struct _reent *r, const char *oldName, const char *newName);
int _FAT_ftruncate_r (struct _reent *r, int fd, off_t len);
int _FAT_fsync_r (struct _reent *r, int fd);
/*
Synchronizes the file data to disc.
Does no locking of its own -- lock the partition before calling.
Returns 0 on success, an error code on failure.
*/
extern int _FAT_syncToDisc (FILE_STRUCT* file);
#endif // _FATFILE_H

View File

@ -0,0 +1,16 @@
#ifndef FAT_FRAG_H_
#define FAT_FRAG_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef int (*_fat_frag_append_t)(void *ff, u32 offset, u32 sector, u32 count);
int _FAT_get_fragments (const char *path, _fat_frag_append_t append_fragment, void *callback_data);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,383 +0,0 @@
/*
file_allocation_table.c
Reading, writing and manipulation of the FAT structure on
a FAT partition
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "file_allocation_table.h"
#include "partition.h"
#include <string.h>
/*
Gets the cluster linked from input cluster
*/
uint32_t _FAT_fat_nextCluster(PARTITION* partition, uint32_t cluster)
{
uint32_t nextCluster = CLUSTER_FREE;
sec_t sector;
int offset;
if (cluster == CLUSTER_FREE) {
return CLUSTER_FREE;
}
switch (partition->filesysType)
{
case FS_UNKNOWN:
return CLUSTER_ERROR;
break;
case FS_FAT12:
{
u32 nextCluster_h;
sector = partition->fat.fatStart + (((cluster * 3) / 2) / BYTES_PER_READ);
offset = ((cluster * 3) / 2) % BYTES_PER_READ;
_FAT_cache_readLittleEndianValue (partition->cache, &nextCluster, sector, offset, sizeof(u8));
offset++;
if (offset >= BYTES_PER_READ) {
offset = 0;
sector++;
}
nextCluster_h = 0;
_FAT_cache_readLittleEndianValue (partition->cache, &nextCluster_h, sector, offset, sizeof(u8));
nextCluster |= (nextCluster_h << 8);
if (cluster & 0x01) {
nextCluster = nextCluster >> 4;
} else {
nextCluster &= 0x0FFF;
}
if (nextCluster >= 0x0FF7)
{
nextCluster = CLUSTER_EOF;
}
break;
}
case FS_FAT16:
sector = partition->fat.fatStart + ((cluster << 1) / BYTES_PER_READ);
offset = (cluster % (BYTES_PER_READ >> 1)) << 1;
_FAT_cache_readLittleEndianValue (partition->cache, &nextCluster, sector, offset, sizeof(u16));
if (nextCluster >= 0xFFF7) {
nextCluster = CLUSTER_EOF;
}
break;
case FS_FAT32:
sector = partition->fat.fatStart + ((cluster << 2) / BYTES_PER_READ);
offset = (cluster % (BYTES_PER_READ >> 2)) << 2;
_FAT_cache_readLittleEndianValue (partition->cache, &nextCluster, sector, offset, sizeof(u32));
if (nextCluster >= 0x0FFFFFF7) {
nextCluster = CLUSTER_EOF;
}
break;
default:
return CLUSTER_ERROR;
break;
}
return nextCluster;
}
/*
writes value into the correct offset within a partition's FAT, based
on the cluster number.
*/
static bool _FAT_fat_writeFatEntry (PARTITION* partition, uint32_t cluster, uint32_t value) {
sec_t sector;
int offset;
uint32_t oldValue;
if ((cluster < CLUSTER_FIRST) || (cluster > partition->fat.lastCluster /* This will catch CLUSTER_ERROR */))
{
return false;
}
switch (partition->filesysType)
{
case FS_UNKNOWN:
return false;
break;
case FS_FAT12:
sector = partition->fat.fatStart + (((cluster * 3) / 2) / BYTES_PER_READ);
offset = ((cluster * 3) / 2) % BYTES_PER_READ;
if (cluster & 0x01) {
_FAT_cache_readLittleEndianValue (partition->cache, &oldValue, sector, offset, sizeof(u8));
value = (value << 4) | (oldValue & 0x0F);
_FAT_cache_writeLittleEndianValue (partition->cache, value & 0xFF, sector, offset, sizeof(u8));
offset++;
if (offset >= BYTES_PER_READ) {
offset = 0;
sector++;
}
_FAT_cache_writeLittleEndianValue (partition->cache, (value >> 8) & 0xFF, sector, offset, sizeof(u8));
} else {
_FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u8));
offset++;
if (offset >= BYTES_PER_READ) {
offset = 0;
sector++;
}
_FAT_cache_readLittleEndianValue (partition->cache, &oldValue, sector, offset, sizeof(u8));
value = ((value >> 8) & 0x0F) | (oldValue & 0xF0);
_FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u8));
}
break;
case FS_FAT16:
sector = partition->fat.fatStart + ((cluster << 1) / BYTES_PER_READ);
offset = (cluster % (BYTES_PER_READ >> 1)) << 1;
_FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u16));
break;
case FS_FAT32:
sector = partition->fat.fatStart + ((cluster << 2) / BYTES_PER_READ);
offset = (cluster % (BYTES_PER_READ >> 2)) << 2;
_FAT_cache_writeLittleEndianValue (partition->cache, value, sector, offset, sizeof(u32));
break;
default:
return false;
break;
}
return true;
}
/*-----------------------------------------------------------------
gets the first available free cluster, sets it
to end of file, links the input cluster to it then returns the
cluster number
If an error occurs, return CLUSTER_ERROR
-----------------------------------------------------------------*/
uint32_t _FAT_fat_linkFreeCluster(PARTITION* partition, uint32_t cluster) {
uint32_t firstFree;
uint32_t curLink;
uint32_t lastCluster;
bool loopedAroundFAT = false;
lastCluster = partition->fat.lastCluster;
if (cluster > lastCluster) {
return CLUSTER_ERROR;
}
// Check if the cluster already has a link, and return it if so
curLink = _FAT_fat_nextCluster(partition, cluster);
if ((curLink >= CLUSTER_FIRST) && (curLink <= lastCluster)) {
return curLink; // Return the current link - don't allocate a new one
}
// Get a free cluster
firstFree = partition->fat.firstFree;
// Start at first valid cluster
if (firstFree < CLUSTER_FIRST) {
firstFree = CLUSTER_FIRST;
}
// Search until a free cluster is found
while (_FAT_fat_nextCluster(partition, firstFree) != CLUSTER_FREE) {
firstFree++;
if (firstFree > lastCluster) {
if (loopedAroundFAT) {
// If couldn't get a free cluster then return an error
partition->fat.firstFree = firstFree;
return CLUSTER_ERROR;
} else {
// Try looping back to the beginning of the FAT
// This was suggested by loopy
firstFree = CLUSTER_FIRST;
loopedAroundFAT = true;
}
}
}
partition->fat.firstFree = firstFree;
if ((cluster >= CLUSTER_FIRST) && (cluster <= lastCluster))
{
// Update the linked from FAT entry
_FAT_fat_writeFatEntry (partition, cluster, firstFree);
}
// Create the linked to FAT entry
_FAT_fat_writeFatEntry (partition, firstFree, CLUSTER_EOF);
return firstFree;
}
/*-----------------------------------------------------------------
gets the first available free cluster, sets it
to end of file, links the input cluster to it, clears the new
cluster to 0 valued bytes, then returns the cluster number
If an error occurs, return CLUSTER_ERROR
-----------------------------------------------------------------*/
uint32_t _FAT_fat_linkFreeClusterCleared (PARTITION* partition, uint32_t cluster) {
uint32_t newCluster;
uint32_t i;
uint8_t emptySector[BYTES_PER_READ];
// Link the cluster
newCluster = _FAT_fat_linkFreeCluster(partition, cluster);
if (newCluster == CLUSTER_FREE || newCluster == CLUSTER_ERROR) {
return CLUSTER_ERROR;
}
// Clear all the sectors within the cluster
memset (emptySector, 0, BYTES_PER_READ);
for (i = 0; i < partition->sectorsPerCluster; i++) {
_FAT_cache_writeSectors (partition->cache,
_FAT_fat_clusterToSector (partition, newCluster) + i,
1, emptySector);
}
return newCluster;
}
/*-----------------------------------------------------------------
_FAT_fat_clearLinks
frees any cluster used by a file
-----------------------------------------------------------------*/
bool _FAT_fat_clearLinks (PARTITION* partition, uint32_t cluster) {
uint32_t nextCluster;
if ((cluster < CLUSTER_FIRST) || (cluster > partition->fat.lastCluster /* This will catch CLUSTER_ERROR */))
return false;
// If this clears up more space in the FAT before the current free pointer, move it backwards
if (cluster < partition->fat.firstFree) {
partition->fat.firstFree = cluster;
}
while ((cluster != CLUSTER_EOF) && (cluster != CLUSTER_FREE) && (cluster != CLUSTER_ERROR)) {
// Store next cluster before erasing the link
nextCluster = _FAT_fat_nextCluster (partition, cluster);
// Erase the link
_FAT_fat_writeFatEntry (partition, cluster, CLUSTER_FREE);
// Move onto next cluster
cluster = nextCluster;
}
return true;
}
/*-----------------------------------------------------------------
_FAT_fat_trimChain
Drop all clusters past the chainLength.
If chainLength is 0, all clusters are dropped.
If chainLength is 1, the first cluster is kept and the rest are
dropped, and so on.
Return the last cluster left in the chain.
-----------------------------------------------------------------*/
uint32_t _FAT_fat_trimChain (PARTITION* partition, uint32_t startCluster, unsigned int chainLength) {
uint32_t nextCluster;
if (chainLength == 0) {
// Drop the entire chain
_FAT_fat_clearLinks (partition, startCluster);
return CLUSTER_FREE;
} else {
// Find the last cluster in the chain, and the one after it
chainLength--;
nextCluster = _FAT_fat_nextCluster (partition, startCluster);
while ((chainLength > 0) && (nextCluster != CLUSTER_FREE) && (nextCluster != CLUSTER_EOF)) {
chainLength--;
startCluster = nextCluster;
nextCluster = _FAT_fat_nextCluster (partition, startCluster);
}
// Drop all clusters after the last in the chain
if (nextCluster != CLUSTER_FREE && nextCluster != CLUSTER_EOF) {
_FAT_fat_clearLinks (partition, nextCluster);
}
// Mark the last cluster in the chain as the end of the file
_FAT_fat_writeFatEntry (partition, startCluster, CLUSTER_EOF);
return startCluster;
}
}
/*-----------------------------------------------------------------
_FAT_fat_lastCluster
Trace the cluster links until the last one is found
-----------------------------------------------------------------*/
uint32_t _FAT_fat_lastCluster (PARTITION* partition, uint32_t cluster) {
while ((_FAT_fat_nextCluster(partition, cluster) != CLUSTER_FREE) && (_FAT_fat_nextCluster(partition, cluster) != CLUSTER_EOF)) {
cluster = _FAT_fat_nextCluster(partition, cluster);
}
return cluster;
}
/*-----------------------------------------------------------------
_FAT_fat_freeClusterCount
Return the number of free clusters available
-----------------------------------------------------------------*/
unsigned int _FAT_fat_freeClusterCount (PARTITION* partition) {
unsigned int count = 0;
uint32_t curCluster;
for (curCluster = CLUSTER_FIRST; curCluster <= partition->fat.lastCluster; curCluster++) {
if (_FAT_fat_nextCluster(partition, curCluster) == CLUSTER_FREE) {
count++;
}
}
return count;
}

View File

@ -1,70 +0,0 @@
/*
file_allocation_table.h
Reading, writing and manipulation of the FAT structure on
a FAT partition
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _FAT_H
#define _FAT_H
#include "common.h"
#include "partition.h"
#define CLUSTER_EOF_16 0xFFFF
#define CLUSTER_EOF 0x0FFFFFFF
#define CLUSTER_FREE 0x00000000
#define CLUSTER_ROOT 0x00000000
#define CLUSTER_FIRST 0x00000002
#define CLUSTER_ERROR 0xFFFFFFFF
#define CLUSTERS_PER_FAT12 4085
#define CLUSTERS_PER_FAT16 65525
uint32_t _FAT_fat_nextCluster(PARTITION* partition, uint32_t cluster);
uint32_t _FAT_fat_linkFreeCluster(PARTITION* partition, uint32_t cluster);
uint32_t _FAT_fat_linkFreeClusterCleared (PARTITION* partition, uint32_t cluster);
bool _FAT_fat_clearLinks (PARTITION* partition, uint32_t cluster);
uint32_t _FAT_fat_trimChain (PARTITION* partition, uint32_t startCluster, unsigned int chainLength);
uint32_t _FAT_fat_lastCluster (PARTITION* partition, uint32_t cluster);
unsigned int _FAT_fat_freeClusterCount (PARTITION* partition);
static inline sec_t _FAT_fat_clusterToSector (PARTITION* partition, uint32_t cluster) {
return (cluster >= CLUSTER_FIRST) ?
((cluster - CLUSTER_FIRST) * (sec_t)partition->sectorsPerCluster) + partition->dataStart :
partition->rootDirStart;
}
static inline bool _FAT_fat_isValidCluster (PARTITION* partition, uint32_t cluster) {
return (cluster >= CLUSTER_FIRST) && (cluster <= partition->fat.lastCluster /* This will catch CLUSTER_ERROR */);
}
#endif // _FAT_H

View File

@ -1,107 +0,0 @@
/*
filetime.c
Conversion of file time and date values to various other types
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <time.h>
#include "filetime.h"
#include "common.h"
#define MAX_HOUR 23
#define MAX_MINUTE 59
#define MAX_SECOND 59
#define MAX_MONTH 11
#define MIN_MONTH 0
#define MAX_DAY 31
#define MIN_DAY 1
uint16_t _FAT_filetime_getTimeFromRTC (void) {
#ifdef USE_RTC_TIME
struct tm timeParts;
time_t epochTime;
if (time(&epochTime) == (time_t)-1) {
return 0;
}
localtime_r(&epochTime, &timeParts);
// Check that the values are all in range.
// If they are not, return 0 (no timestamp)
if ((timeParts.tm_hour < 0) || (timeParts.tm_hour > MAX_HOUR)) return 0;
if ((timeParts.tm_min < 0) || (timeParts.tm_min > MAX_MINUTE)) return 0;
if ((timeParts.tm_sec < 0) || (timeParts.tm_sec > MAX_SECOND)) return 0;
return (
((timeParts.tm_hour & 0x1F) << 11) |
((timeParts.tm_min & 0x3F) << 5) |
((timeParts.tm_sec >> 1) & 0x1F)
);
#else
return 0;
#endif
}
uint16_t _FAT_filetime_getDateFromRTC (void) {
#ifdef USE_RTC_TIME
struct tm timeParts;
time_t epochTime;
if (time(&epochTime) == (time_t)-1) {
return 0;
}
localtime_r(&epochTime, &timeParts);
if ((timeParts.tm_mon < MIN_MONTH) || (timeParts.tm_mon > MAX_MONTH)) return 0;
if ((timeParts.tm_mday < MIN_DAY) || (timeParts.tm_mday > MAX_DAY)) return 0;
return (
(((timeParts.tm_year - 80) & 0x7F) <<9) | // Adjust for MS-FAT base year (1980 vs 1900 for tm_year)
(((timeParts.tm_mon + 1) & 0xF) << 5) |
(timeParts.tm_mday & 0x1F)
);
#else
return 0;
#endif
}
time_t _FAT_filetime_to_time_t (uint16_t t, uint16_t d) {
struct tm timeParts;
timeParts.tm_hour = t >> 11;
timeParts.tm_min = (t >> 5) & 0x3F;
timeParts.tm_sec = (t & 0x1F) << 1;
timeParts.tm_mday = d & 0x1F;
timeParts.tm_mon = ((d >> 5) & 0x0F) - 1;
timeParts.tm_year = (d >> 9) + 80;
timeParts.tm_isdst = 0;
return mktime(&timeParts);
}

View File

@ -1,41 +0,0 @@
/*
filetime.h
Conversion of file time and date values to various other types
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _FILETIME_H
#define _FILETIME_H
#include "common.h"
#include <sys/types.h>
uint16_t _FAT_filetime_getTimeFromRTC (void);
uint16_t _FAT_filetime_getDateFromRTC (void);
time_t _FAT_filetime_to_time_t (uint16_t t, uint16_t d);
#endif // _FILETIME_H

Binary file not shown.

View File

@ -1,249 +0,0 @@
/*
libfat.c
Simple functionality for startup, mounting and unmounting of FAT-based devices.
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/iosupport.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include "common.h"
#include "partition.h"
#include "fatfile.h"
#include "fatdir.h"
#include "lock.h"
#include "mem_allocate.h"
#include "disc.h"
static const devoptab_t dotab_fat = {
"fat",
sizeof (FILE_STRUCT),
_FAT_open_r,
_FAT_close_r,
_FAT_write_r,
_FAT_read_r,
_FAT_seek_r,
_FAT_fstat_r,
_FAT_stat_r,
_FAT_link_r,
_FAT_unlink_r,
_FAT_chdir_r,
_FAT_rename_r,
_FAT_mkdir_r,
sizeof (DIR_STATE_STRUCT),
_FAT_diropen_r,
_FAT_dirreset_r,
_FAT_dirnext_r,
_FAT_dirclose_r,
_FAT_statvfs_r,
_FAT_ftruncate_r,
_FAT_fsync_r,
NULL, /* Device data */
NULL,
NULL
};
bool fatMount (const char* name, const DISC_INTERFACE* interface, sec_t startSector, uint32_t cacheSize, uint32_t SectorsPerPage) {
PARTITION* partition;
devoptab_t* devops;
char* nameCopy;
if(!name || strlen(name) > 8 || !interface)
return false;
if(!interface->startup())
return false;
if(!interface->isInserted())
return false;
char devname[10];
sprintf(devname, "%s:", name);
if(FindDevice(devname) >= 0)
return true;
devops = _FAT_mem_allocate (sizeof(devoptab_t) + strlen(name) + 1);
if (!devops) {
return false;
}
// Use the space allocated at the end of the devoptab struct for storing the name
nameCopy = (char*)(devops+1);
// Initialize the file system
partition = _FAT_partition_constructor (interface, cacheSize, SectorsPerPage, startSector);
if (!partition) {
_FAT_mem_free (devops);
return false;
}
// Add an entry for this device to the devoptab table
memcpy (devops, &dotab_fat, sizeof(dotab_fat));
strcpy (nameCopy, name);
devops->name = nameCopy;
devops->deviceData = partition;
AddDevice (devops);
return true;
}
bool fatMountSimple (const char* name, const DISC_INTERFACE* interface) {
return fatMount (name, interface, 0, DEFAULT_CACHE_PAGES, DEFAULT_SECTORS_PAGE);
}
void fatUnmount (const char* name) {
devoptab_t *devops;
PARTITION* partition;
if(!name)
return;
devops = (devoptab_t*)GetDeviceOpTab (name);
if (!devops) {
return;
}
// Perform a quick check to make sure we're dealing with a libfat controlled device
if (devops->open_r != dotab_fat.open_r) {
return;
}
if (RemoveDevice (name) == -1) {
return;
}
partition = (PARTITION*)devops->deviceData;
_FAT_partition_destructor (partition);
_FAT_mem_free (devops);
}
bool fatInit (uint32_t cacheSize, bool setAsDefaultDevice) {
int i;
int defaultDevice = -1;
const DISC_INTERFACE *disc;
for (i = 0;
_FAT_disc_interfaces[i].name != NULL && _FAT_disc_interfaces[i].getInterface != NULL;
i++)
{
disc = _FAT_disc_interfaces[i].getInterface();
if (fatMount (_FAT_disc_interfaces[i].name, disc, 0, cacheSize, DEFAULT_SECTORS_PAGE)) {
// The first device to successfully mount is set as the default
if (defaultDevice < 0) {
defaultDevice = i;
}
}
}
if (defaultDevice < 0) {
// None of our devices mounted
return false;
}
if (setAsDefaultDevice) {
char filePath[MAXPATHLEN * 2];
strcpy (filePath, _FAT_disc_interfaces[defaultDevice].name);
strcat (filePath, ":/");
#ifdef ARGV_MAGIC
if ( __system_argv->argvMagic == ARGV_MAGIC && __system_argv->argc >= 1 && strrchr( __system_argv->argv[0], '/' )!=NULL ) {
// Check the app's path against each of our mounted devices, to see
// if we can support it. If so, change to that path.
for (i = 0;
_FAT_disc_interfaces[i].name != NULL && _FAT_disc_interfaces[i].getInterface != NULL;
i++)
{
if ( !strncasecmp( __system_argv->argv[0], _FAT_disc_interfaces[i].name,
strlen(_FAT_disc_interfaces[i].name)))
{
char *lastSlash;
strcpy(filePath, __system_argv->argv[0]);
lastSlash = strrchr( filePath, '/' );
if ( NULL != lastSlash) {
if ( *(lastSlash - 1) == ':') lastSlash++;
*lastSlash = 0;
}
}
}
}
#endif
chdir (filePath);
}
return true;
}
bool fatInitDefault (void) {
return fatInit (DEFAULT_CACHE_PAGES, true);
}
void fatGetVolumeLabel (const char* name, char *label) {
devoptab_t *devops;
PARTITION* partition;
char *buf;
int namelen,i;
if(!name || !label)
return;
namelen = strlen(name);
buf=(char*)_FAT_mem_allocate(sizeof(char)*namelen+2);
strcpy(buf,name);
if (name[namelen-1] == '/') {
buf[namelen-1]='\0';
namelen--;
}
if (name[namelen-1] != ':') {
buf[namelen]=':';
buf[namelen+1]='\0';
}
devops = (devoptab_t*)GetDeviceOpTab(buf);
for(i=0;buf[i]!='\0' && buf[i]!=':';i++);
if (!devops || strncasecmp(buf,devops->name,i)) {
_FAT_mem_free(buf);
return;
}
_FAT_mem_free(buf);
// Perform a quick check to make sure we're dealing with a libfat controlled device
if (devops->open_r != dotab_fat.open_r) {
return;
}
partition = (PARTITION*)devops->deviceData;
if(!_FAT_directory_getVolumeLabel(partition, label)) {
strncpy(label,partition->label,11);
label[11]='\0';
}
if(!strncmp(label, "NO NAME", 7)) label[0]='\0';
}

View File

@ -1,10 +0,0 @@
#ifndef __LIBFATVERSION_H__
#define __LIBFATVERSION_H__
#define _LIBFAT_MAJOR_ 1
#define _LIBFAT_MINOR_ 0
#define _LIBFAT_PATCH_ 7
#define _LIBFAT_STRING "libFAT Release 1.0.7"
#endif // __LIBFATVERSION_H__

View File

@ -1,56 +0,0 @@
/*
lock.h
Copyright (c) 2008 Sven Peter <svpe@gmx.net>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LOCK_H
#define _LOCK_H
#include "common.h"
static inline void _FAT_lock_init(mutex_t *mutex)
{
LWP_MutexInit(mutex, false);
}
static inline void _FAT_lock_deinit(mutex_t *mutex)
{
LWP_MutexDestroy(*mutex);
}
static inline void _FAT_lock(mutex_t *mutex)
{
LWP_MutexLock(*mutex);
}
static inline void _FAT_unlock(mutex_t *mutex)
{
LWP_MutexUnlock(*mutex);
}
#endif // _LOCK_H

View File

@ -1,49 +0,0 @@
/*
mem_allocate.h
Memory allocation and destruction calls
Replace these calls with custom allocators if
malloc is unavailable
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _MEM_ALLOCATE_H
#define _MEM_ALLOCATE_H
#include <malloc.h>
#include "memory/mem2.h"
static inline void* _FAT_mem_allocate (size_t size) {
return MEM2_alloc(size);
}
static inline void* _FAT_mem_align (size_t size) {
return MEM2_alloc(size);
}
static inline void _FAT_mem_free (void* mem) {
MEM2_free(mem);
}
#endif // _MEM_ALLOCATE_H

View File

@ -1,318 +0,0 @@
/*
partition.c
Functions for mounting and dismounting partitions
on various block devices.
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "partition.h"
#include "bit_ops.h"
#include "file_allocation_table.h"
#include "directory.h"
#include "mem_allocate.h"
#include "fatfile.h"
#include <string.h>
#include <ctype.h>
#include <sys/iosupport.h>
sec_t _FAT_startSector;
/*
This device name, as known by devkitPro toolchains
*/
const char* DEVICE_NAME = "fat";
/*
Data offsets
*/
// BIOS Parameter Block offsets
enum BPB {
BPB_jmpBoot = 0x00,
BPB_OEMName = 0x03,
// BIOS Parameter Block
BPB_bytesPerSector = 0x0B,
BPB_sectorsPerCluster = 0x0D,
BPB_reservedSectors = 0x0E,
BPB_numFATs = 0x10,
BPB_rootEntries = 0x11,
BPB_numSectorsSmall = 0x13,
BPB_mediaDesc = 0x15,
BPB_sectorsPerFAT = 0x16,
BPB_sectorsPerTrk = 0x18,
BPB_numHeads = 0x1A,
BPB_numHiddenSectors = 0x1C,
BPB_numSectors = 0x20,
// Ext BIOS Parameter Block for FAT16
BPB_FAT16_driveNumber = 0x24,
BPB_FAT16_reserved1 = 0x25,
BPB_FAT16_extBootSig = 0x26,
BPB_FAT16_volumeID = 0x27,
BPB_FAT16_volumeLabel = 0x2B,
BPB_FAT16_fileSysType = 0x36,
// Bootcode
BPB_FAT16_bootCode = 0x3E,
// FAT32 extended block
BPB_FAT32_sectorsPerFAT32 = 0x24,
BPB_FAT32_extFlags = 0x28,
BPB_FAT32_fsVer = 0x2A,
BPB_FAT32_rootClus = 0x2C,
BPB_FAT32_fsInfo = 0x30,
BPB_FAT32_bkBootSec = 0x32,
// Ext BIOS Parameter Block for FAT32
BPB_FAT32_driveNumber = 0x40,
BPB_FAT32_reserved1 = 0x41,
BPB_FAT32_extBootSig = 0x42,
BPB_FAT32_volumeID = 0x43,
BPB_FAT32_volumeLabel = 0x47,
BPB_FAT32_fileSysType = 0x52,
// Bootcode
BPB_FAT32_bootCode = 0x5A,
BPB_bootSig_55 = 0x1FE,
BPB_bootSig_AA = 0x1FF
};
static const char FAT_SIG[3] = {'F', 'A', 'T'};
sec_t FindFirstValidPartition(const DISC_INTERFACE* disc)
{
uint8_t part_table[16*4];
uint8_t *ptr;
int i;
uint8_t sectorBuffer[BYTES_PER_READ] = {0};
// Read first sector of disc
if (!_FAT_disc_readSectors (disc, 0, 1, sectorBuffer)) {
return 0;
}
memcpy(part_table,sectorBuffer+0x1BE,16*4);
ptr = part_table;
for(i=0;i<4;i++,ptr+=16) {
sec_t part_lba = u8array_to_u32(ptr, 0x8);
if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) ||
!memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) {
return part_lba;
}
if(ptr[4]==0) continue;
if(ptr[4]==0x0F) {
sec_t part_lba2=part_lba;
sec_t next_lba2=0;
int n;
for(n=0;n<8;n++) // max 8 logic partitions
{
if(!_FAT_disc_readSectors (disc, part_lba+next_lba2, 1, sectorBuffer)) return 0;
part_lba2 = part_lba + next_lba2 + u8array_to_u32(sectorBuffer, 0x1C6) ;
next_lba2 = u8array_to_u32(sectorBuffer, 0x1D6);
if(!_FAT_disc_readSectors (disc, part_lba2, 1, sectorBuffer)) return 0;
if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) ||
!memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG)))
{
return part_lba2;
}
if(next_lba2==0) break;
}
} else {
if(!_FAT_disc_readSectors (disc, part_lba, 1, sectorBuffer)) return 0;
if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) ||
!memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) {
return part_lba;
}
}
}
return 0;
}
PARTITION* _FAT_partition_constructor (const DISC_INTERFACE* disc, uint32_t cacheSize, uint32_t sectorsPerPage, sec_t startSector) {
PARTITION* partition;
uint8_t sectorBuffer[BYTES_PER_READ] = {0};
// Read first sector of disc
if (!_FAT_disc_readSectors (disc, startSector, 1, sectorBuffer)) {
return NULL;
}
// Make sure it is a valid MBR or boot sector
if ( (sectorBuffer[BPB_bootSig_55] != 0x55) || (sectorBuffer[BPB_bootSig_AA] != 0xAA)) {
return NULL;
}
if (startSector != 0) {
// We're told where to start the partition, so just accept it
} else if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG))) {
// Check if there is a FAT string, which indicates this is a boot sector
startSector = 0;
} else if (!memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) {
// Check for FAT32
startSector = 0;
} else {
startSector = FindFirstValidPartition(disc);
if (!_FAT_disc_readSectors (disc, startSector, 1, sectorBuffer)) {
return NULL;
}
}
// Now verify that this is indeed a FAT partition
if (memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) &&
memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG)))
{
return NULL;
}
// check again for the last two cases to make sure that we really have a FAT filesystem here
// and won't corrupt any data
if(memcmp(sectorBuffer + BPB_FAT16_fileSysType, "FAT", 3) != 0 && memcmp(sectorBuffer + BPB_FAT32_fileSysType, "FAT32", 5) != 0)
{
return NULL;
}
partition = (PARTITION*) _FAT_mem_allocate (sizeof(PARTITION));
if (partition == NULL) {
return NULL;
}
// Init the partition lock
_FAT_lock_init(&partition->lock);
_FAT_startSector = startSector;
if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)))
strncpy(partition->label, (char*)(sectorBuffer + BPB_FAT16_volumeLabel), 11);
else
strncpy(partition->label, (char*)(sectorBuffer + BPB_FAT32_volumeLabel), 11);
partition->label[11] = '\0';
// Set partition's disc interface
partition->disc = disc;
// Store required information about the file system
partition->fat.sectorsPerFat = u8array_to_u16(sectorBuffer, BPB_sectorsPerFAT);
if (partition->fat.sectorsPerFat == 0) {
partition->fat.sectorsPerFat = u8array_to_u32( sectorBuffer, BPB_FAT32_sectorsPerFAT32);
}
partition->numberOfSectors = u8array_to_u16( sectorBuffer, BPB_numSectorsSmall);
if (partition->numberOfSectors == 0) {
partition->numberOfSectors = u8array_to_u32( sectorBuffer, BPB_numSectors);
}
partition->bytesPerSector = BYTES_PER_READ; // Sector size is redefined to be 512 bytes
partition->sectorsPerCluster = sectorBuffer[BPB_sectorsPerCluster] * u8array_to_u16(sectorBuffer, BPB_bytesPerSector) / BYTES_PER_READ;
partition->bytesPerCluster = partition->bytesPerSector * partition->sectorsPerCluster;
partition->fat.fatStart = startSector + u8array_to_u16(sectorBuffer, BPB_reservedSectors);
partition->rootDirStart = partition->fat.fatStart + (sectorBuffer[BPB_numFATs] * partition->fat.sectorsPerFat);
partition->dataStart = partition->rootDirStart +
(( u8array_to_u16(sectorBuffer, BPB_rootEntries) * DIR_ENTRY_DATA_SIZE) / partition->bytesPerSector);
partition->totalSize = ((uint64_t)partition->numberOfSectors - (partition->dataStart - startSector)) * (uint64_t)partition->bytesPerSector;
// Store info about FAT
uint32_t clusterCount = (partition->numberOfSectors - (uint32_t)(partition->dataStart - startSector)) / partition->sectorsPerCluster;
partition->fat.lastCluster = clusterCount + CLUSTER_FIRST - 1;
partition->fat.firstFree = CLUSTER_FIRST;
if (clusterCount < CLUSTERS_PER_FAT12) {
partition->filesysType = FS_FAT12; // FAT12 volume
} else if (clusterCount < CLUSTERS_PER_FAT16) {
partition->filesysType = FS_FAT16; // FAT16 volume
} else {
partition->filesysType = FS_FAT32; // FAT32 volume
}
if (partition->filesysType != FS_FAT32) {
partition->rootDirCluster = FAT16_ROOT_DIR_CLUSTER;
} else {
// Set up for the FAT32 way
partition->rootDirCluster = u8array_to_u32(sectorBuffer, BPB_FAT32_rootClus);
// Check if FAT mirroring is enabled
if (!(sectorBuffer[BPB_FAT32_extFlags] & 0x80)) {
// Use the active FAT
partition->fat.fatStart = partition->fat.fatStart + ( partition->fat.sectorsPerFat * (sectorBuffer[BPB_FAT32_extFlags] & 0x0F));
}
}
// Create a cache to use
partition->cache = _FAT_cache_constructor (cacheSize, sectorsPerPage, partition->disc, startSector+partition->numberOfSectors);
// Set current directory to the root
partition->cwdCluster = partition->rootDirCluster;
// Check if this disc is writable, and set the readOnly property appropriately
partition->readOnly = !(_FAT_disc_features(disc) & FEATURE_MEDIUM_CANWRITE);
// There are currently no open files on this partition
partition->openFileCount = 0;
partition->firstOpenFile = NULL;
return partition;
}
void _FAT_partition_destructor (PARTITION* partition) {
FILE_STRUCT* nextFile;
_FAT_lock(&partition->lock);
// Synchronize open files
nextFile = partition->firstOpenFile;
while (nextFile) {
_FAT_syncToDisc (nextFile);
nextFile = nextFile->nextOpenFile;
}
// Free memory used by the cache, writing it to disc at the same time
_FAT_cache_destructor (partition->cache);
// Unlock the partition and destroy the lock
_FAT_unlock(&partition->lock);
_FAT_lock_deinit(&partition->lock);
// Free memory used by the partition
_FAT_mem_free (partition);
}
PARTITION* _FAT_partition_getPartitionFromPath (const char* path) {
const devoptab_t *devops;
devops = GetDeviceOpTab (path);
if (!devops) {
return NULL;
}
return (PARTITION*)devops->deviceData;
}

View File

@ -1,89 +0,0 @@
/*
partition.h
Functions for mounting and dismounting partitions
on various block devices.
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _PARTITION_H
#define _PARTITION_H
#include "common.h"
#include "cache.h"
#include "lock.h"
// Device name
extern const char* DEVICE_NAME;
// Filesystem type
typedef enum {FS_UNKNOWN, FS_FAT12, FS_FAT16, FS_FAT32} FS_TYPE;
typedef struct {
sec_t fatStart;
uint32_t sectorsPerFat;
uint32_t lastCluster;
uint32_t firstFree;
} FAT;
typedef struct {
const DISC_INTERFACE* disc;
CACHE* cache;
// Info about the partition
FS_TYPE filesysType;
uint64_t totalSize;
sec_t rootDirStart;
uint32_t rootDirCluster;
uint32_t numberOfSectors;
sec_t dataStart;
uint32_t bytesPerSector;
uint32_t sectorsPerCluster;
uint32_t bytesPerCluster;
FAT fat;
// Values that may change after construction
uint32_t cwdCluster; // Current working directory cluster
int openFileCount;
struct _FILE_STRUCT* firstOpenFile; // The start of a linked list of files
mutex_t lock; // A lock for partition operations
bool readOnly; // If this is set, then do not try writing to the disc
char label[12]; // Volume label
} PARTITION;
/*
Mount the supplied device and return a pointer to the struct necessary to use it
*/
PARTITION* _FAT_partition_constructor (const DISC_INTERFACE* disc, uint32_t cacheSize, uint32_t SectorsPerPage, sec_t startSector);
/*
Dismount the device and free all structures used.
Will also attempt to synchronise all open files to disc.
*/
void _FAT_partition_destructor (PARTITION* partition);
/*
Return the partition specified in a path, as taken from the devoptab.
*/
PARTITION* _FAT_partition_getPartitionFromPath (const char* path);
#endif // _PARTITION_H

File diff suppressed because it is too large Load Diff

View File

@ -1,199 +0,0 @@
/*
*
* Copyright (c) 2007-2008 Jean-Pierre Andre
*
*/
/*
* 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef ACLS_H
#define ACLS_H
/*
* JPA configuration modes for security.c / acls.c
* should be moved to some config file
*/
#define BUFSZ 1024 /* buffer size to read mapping file */
#define MAPPINGFILE ".NTFS-3G/UserMapping" /* default mapping file */
#define LINESZ 120 /* maximum useful size of a mapping line */
#define CACHE_PERMISSIONS_BITS 6 /* log2 of unitary allocation of permissions */
#define CACHE_PERMISSIONS_SIZE 262144 /* max cacheable permissions */
/*
* JPA The following must be in some library...
* but did not found out where
*/
#define endian_rev16(x) (((x >> 8) & 255) | ((x & 255) << 8))
#define endian_rev32(x) (((x >> 24) & 255) | ((x >> 8) & 0xff00) \
| ((x & 0xff00) << 8) | ((x & 255) << 24))
#define cpu_to_be16(x) endian_rev16(cpu_to_le16(x))
#define cpu_to_be32(x) endian_rev32(cpu_to_le32(x))
/*
* Macro definitions needed to share code with secaudit
*/
#define NTFS_FIND_USID(map,uid,buf) ntfs_find_usid(map,uid,buf)
#define NTFS_FIND_GSID(map,gid,buf) ntfs_find_gsid(map,gid,buf)
#define NTFS_FIND_USER(map,usid) ntfs_find_user(map,usid)
#define NTFS_FIND_GROUP(map,gsid) ntfs_find_group(map,gsid)
/*
* Matching of ntfs permissions to Linux permissions
* these constants are adapted to endianness
* when setting, set them all
* when checking, check one is present
*/
/* flags which are set to mean exec, write or read */
#define FILE_READ (FILE_READ_DATA)
#define FILE_WRITE (FILE_WRITE_DATA | FILE_APPEND_DATA \
| READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA)
#define FILE_EXEC (FILE_EXECUTE)
#define DIR_READ FILE_LIST_DIRECTORY
#define DIR_WRITE (FILE_ADD_FILE | FILE_ADD_SUBDIRECTORY | FILE_DELETE_CHILD \
| READ_CONTROL | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA)
#define DIR_EXEC (FILE_TRAVERSE)
/* flags tested for meaning exec, write or read */
/* tests for write allow for interpretation of a sticky bit */
#define FILE_GREAD (FILE_READ_DATA | GENERIC_READ)
#define FILE_GWRITE (FILE_WRITE_DATA | FILE_APPEND_DATA | GENERIC_WRITE)
#define FILE_GEXEC (FILE_EXECUTE | GENERIC_EXECUTE)
#define DIR_GREAD (FILE_LIST_DIRECTORY | GENERIC_READ)
#define DIR_GWRITE (FILE_ADD_FILE | FILE_ADD_SUBDIRECTORY | GENERIC_WRITE)
#define DIR_GEXEC (FILE_TRAVERSE | GENERIC_EXECUTE)
/* standard owner (and administrator) rights */
#define OWNER_RIGHTS (DELETE | READ_CONTROL | WRITE_DAC | WRITE_OWNER \
| SYNCHRONIZE \
| FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES \
| FILE_READ_EA | FILE_WRITE_EA)
/* standard world rights */
#define WORLD_RIGHTS (READ_CONTROL | FILE_READ_ATTRIBUTES | FILE_READ_EA \
| SYNCHRONIZE)
/* inheritance flags for files and directories */
#define FILE_INHERITANCE NO_PROPAGATE_INHERIT_ACE
#define DIR_INHERITANCE (OBJECT_INHERIT_ACE | CONTAINER_INHERIT_ACE)
/*
* To identify NTFS ACL meaning Posix ACL granted to root
* we use rights always granted to anybody, so they have no impact
* either on Windows or on Linux.
*/
#define ROOT_OWNER_UNMARK SYNCHRONIZE /* ACL granted to root as owner */
#define ROOT_GROUP_UNMARK FILE_READ_EA /* ACL granted to root as group */
/*
* A type large enough to hold any SID
*/
typedef char BIGSID[40];
/*
* Struct to hold the input mapping file
* (private to this module)
*/
struct MAPLIST {
struct MAPLIST *next;
char *uidstr; /* uid text from the same record */
char *gidstr; /* gid text from the same record */
char *sidstr; /* sid text from the same record */
char maptext[LINESZ + 1];
};
typedef int (*FILEREADER)(void *fileid, char *buf, size_t size, off_t pos);
/*
* Constants defined in acls.c
*/
extern const SID *adminsid;
extern const SID *worldsid;
/*
* Functions defined in acls.c
*/
BOOL ntfs_valid_descr(const char *securattr, unsigned int attrsz);
BOOL ntfs_valid_pattern(const SID *sid);
BOOL ntfs_valid_sid(const SID *sid);
BOOL ntfs_same_sid(const SID *first, const SID *second);
BOOL ntfs_is_user_sid(const SID *usid);
int ntfs_sid_size(const SID * sid);
unsigned int ntfs_attr_size(const char *attr);
const SID *ntfs_find_usid(const struct MAPPING *usermapping,
uid_t uid, SID *pdefsid);
const SID *ntfs_find_gsid(const struct MAPPING *groupmapping,
gid_t gid, SID *pdefsid);
uid_t ntfs_find_user(const struct MAPPING *usermapping, const SID *usid);
gid_t ntfs_find_group(const struct MAPPING *groupmapping, const SID * gsid);
const SID *ntfs_acl_owner(const char *secattr);
#if POSIXACLS
BOOL ntfs_valid_posix(const struct POSIX_SECURITY *pxdesc);
void ntfs_sort_posix(struct POSIX_SECURITY *pxdesc);
int ntfs_merge_mode_posix(struct POSIX_SECURITY *pxdesc, mode_t mode);
struct POSIX_SECURITY *ntfs_build_inherited_posix(
const struct POSIX_SECURITY *pxdesc, mode_t mode,
mode_t umask, BOOL isdir);
struct POSIX_SECURITY *ntfs_replace_acl(const struct POSIX_SECURITY *oldpxdesc,
const struct POSIX_ACL *newacl, int count, BOOL deflt);
struct POSIX_SECURITY *ntfs_build_permissions_posix(
struct MAPPING* const mapping[],
const char *securattr,
const SID *usid, const SID *gsid, BOOL isdir);
struct POSIX_SECURITY *ntfs_merge_descr_posix(const struct POSIX_SECURITY *first,
const struct POSIX_SECURITY *second);
char *ntfs_build_descr_posix(struct MAPPING* const mapping[],
struct POSIX_SECURITY *pxdesc,
int isdir, const SID *usid, const SID *gsid);
#endif /* POSIXACLS */
int ntfs_inherit_acl(const ACL *oldacl, ACL *newacl,
const SID *usid, const SID *gsid, BOOL fordir);
int ntfs_build_permissions(const char *securattr,
const SID *usid, const SID *gsid, BOOL isdir);
char *ntfs_build_descr(mode_t mode,
int isdir, const SID * usid, const SID * gsid);
struct MAPLIST *ntfs_read_mapping(FILEREADER reader, void *fileid);
struct MAPPING *ntfs_do_user_mapping(struct MAPLIST *firstitem);
struct MAPPING *ntfs_do_group_mapping(struct MAPLIST *firstitem);
void ntfs_free_mapping(struct MAPPING *mapping[]);
#endif /* ACLS_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,375 +0,0 @@
/*
* attrib.h - Exports for attribute handling. Originated from the Linux-NTFS project.
*
* Copyright (c) 2000-2004 Anton Altaparmakov
* Copyright (c) 2004-2005 Yura Pakhuchiy
* Copyright (c) 2006-2007 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_ATTRIB_H
#define _NTFS_ATTRIB_H
/* Forward declarations */
typedef struct _ntfs_attr ntfs_attr;
typedef struct _ntfs_attr_search_ctx ntfs_attr_search_ctx;
#include "types.h"
#include "inode.h"
#include "unistr.h"
#include "runlist.h"
#include "volume.h"
#include "debug.h"
#include "logging.h"
extern ntfschar AT_UNNAMED[];
extern ntfschar STREAM_SDS[];
/* The little endian Unicode string $TXF_DATA as a global constant. */
extern ntfschar TXF_DATA[10];
/**
* enum ntfs_lcn_special_values - special return values for ntfs_*_vcn_to_lcn()
*
* Special return values for ntfs_rl_vcn_to_lcn() and ntfs_attr_vcn_to_lcn().
*
* TODO: Describe them.
*/
typedef enum {
LCN_HOLE = -1, /* Keep this as highest value or die! */
LCN_RL_NOT_MAPPED = -2,
LCN_ENOENT = -3,
LCN_EINVAL = -4,
LCN_EIO = -5,
} ntfs_lcn_special_values;
/**
* struct ntfs_attr_search_ctx - search context used in attribute search functions
* @mrec: buffer containing mft record to search
* @attr: attribute record in @mrec where to begin/continue search
* @is_first: if true lookup_attr() begins search with @attr, else after @attr
*
* Structure must be initialized to zero before the first call to one of the
* attribute search functions. Initialize @mrec to point to the mft record to
* search, and @attr to point to the first attribute within @mrec (not necessary
* if calling the _first() functions), and set @is_first to TRUE (not necessary
* if calling the _first() functions).
*
* If @is_first is TRUE, the search begins with @attr. If @is_first is FALSE,
* the search begins after @attr. This is so that, after the first call to one
* of the search attribute functions, we can call the function again, without
* any modification of the search context, to automagically get the next
* matching attribute.
*/
struct _ntfs_attr_search_ctx {
MFT_RECORD *mrec;
ATTR_RECORD *attr;
BOOL is_first;
ntfs_inode *ntfs_ino;
ATTR_LIST_ENTRY *al_entry;
ntfs_inode *base_ntfs_ino;
MFT_RECORD *base_mrec;
ATTR_RECORD *base_attr;
};
extern void ntfs_attr_reinit_search_ctx(ntfs_attr_search_ctx *ctx);
extern ntfs_attr_search_ctx *ntfs_attr_get_search_ctx(ntfs_inode *ni,
MFT_RECORD *mrec);
extern void ntfs_attr_put_search_ctx(ntfs_attr_search_ctx *ctx);
extern int ntfs_attr_lookup(const ATTR_TYPES type, const ntfschar *name,
const u32 name_len, const IGNORE_CASE_BOOL ic,
const VCN lowest_vcn, const u8 *val, const u32 val_len,
ntfs_attr_search_ctx *ctx);
extern int ntfs_attr_position(const ATTR_TYPES type, ntfs_attr_search_ctx *ctx);
extern ATTR_DEF *ntfs_attr_find_in_attrdef(const ntfs_volume *vol,
const ATTR_TYPES type);
/**
* ntfs_attrs_walk - syntactic sugar for walking all attributes in an inode
* @ctx: initialised attribute search context
*
* Syntactic sugar for walking attributes in an inode.
*
* Return 0 on success and -1 on error with errno set to the error code from
* ntfs_attr_lookup().
*
* Example: When you want to enumerate all attributes in an open ntfs inode
* @ni, you can simply do:
*
* int err;
* ntfs_attr_search_ctx *ctx = ntfs_attr_get_search_ctx(ni, NULL);
* if (!ctx)
* // Error code is in errno. Handle this case.
* while (!(err = ntfs_attrs_walk(ctx))) {
* ATTR_RECORD *attr = ctx->attr;
* // attr now contains the next attribute. Do whatever you want
* // with it and then just continue with the while loop.
* }
* if (err && errno != ENOENT)
* // Ooops. An error occurred! You should handle this case.
* // Now finished with all attributes in the inode.
*/
static __inline__ int ntfs_attrs_walk(ntfs_attr_search_ctx *ctx)
{
return ntfs_attr_lookup(AT_UNUSED, NULL, 0, CASE_SENSITIVE, 0,
NULL, 0, ctx);
}
/**
* struct ntfs_attr - ntfs in memory non-resident attribute structure
* @rl: if not NULL, the decompressed runlist
* @ni: base ntfs inode to which this attribute belongs
* @type: attribute type
* @name: Unicode name of the attribute
* @name_len: length of @name in Unicode characters
* @state: NTFS attribute specific flags describing this attribute
* @allocated_size: copy from the attribute record
* @data_size: copy from the attribute record
* @initialized_size: copy from the attribute record
* @compressed_size: copy from the attribute record
* @compression_block_size: size of a compression block (cb)
* @compression_block_size_bits: log2 of the size of a cb
* @compression_block_clusters: number of clusters per cb
*
* This structure exists purely to provide a mechanism of caching the runlist
* of an attribute. If you want to operate on a particular attribute extent,
* you should not be using this structure at all. If you want to work with a
* resident attribute, you should not be using this structure at all. As a
* fail-safe check make sure to test NAttrNonResident() and if it is false, you
* know you shouldn't be using this structure.
*
* If you want to work on a resident attribute or on a specific attribute
* extent, you should use ntfs_lookup_attr() to retrieve the attribute (extent)
* record, edit that, and then write back the mft record (or set the
* corresponding ntfs inode dirty for delayed write back).
*
* @rl is the decompressed runlist of the attribute described by this
* structure. Obviously this only makes sense if the attribute is not resident,
* i.e. NAttrNonResident() is true. If the runlist hasn't been decompressed yet
* @rl is NULL, so be prepared to cope with @rl == NULL.
*
* @ni is the base ntfs inode of the attribute described by this structure.
*
* @type is the attribute type (see layout.h for the definition of ATTR_TYPES),
* @name and @name_len are the little endian Unicode name and the name length
* in Unicode characters of the attribute, respectively.
*
* @state contains NTFS attribute specific flags describing this attribute
* structure. See ntfs_attr_state_bits above.
*/
struct _ntfs_attr {
runlist_element *rl;
ntfs_inode *ni;
ATTR_TYPES type;
ATTR_FLAGS data_flags;
ntfschar *name;
u32 name_len;
unsigned long state;
s64 allocated_size;
s64 data_size;
s64 initialized_size;
s64 compressed_size;
u32 compression_block_size;
u8 compression_block_size_bits;
u8 compression_block_clusters;
s8 unused_runs; /* pre-reserved entries available */
};
/**
* enum ntfs_attr_state_bits - bits for the state field in the ntfs_attr
* structure
*/
typedef enum {
NA_Initialized, /* 1: structure is initialized. */
NA_NonResident, /* 1: Attribute is not resident. */
NA_BeingNonResident, /* 1: Attribute is being made not resident. */
NA_FullyMapped, /* 1: Attribute has been fully mapped */
NA_ComprClosing, /* 1: Compressed attribute is being closed */
} ntfs_attr_state_bits;
#define test_nattr_flag(na, flag) test_bit(NA_##flag, (na)->state)
#define set_nattr_flag(na, flag) set_bit(NA_##flag, (na)->state)
#define clear_nattr_flag(na, flag) clear_bit(NA_##flag, (na)->state)
#define NAttrInitialized(na) test_nattr_flag(na, Initialized)
#define NAttrSetInitialized(na) set_nattr_flag(na, Initialized)
#define NAttrClearInitialized(na) clear_nattr_flag(na, Initialized)
#define NAttrNonResident(na) test_nattr_flag(na, NonResident)
#define NAttrSetNonResident(na) set_nattr_flag(na, NonResident)
#define NAttrClearNonResident(na) clear_nattr_flag(na, NonResident)
#define NAttrBeingNonResident(na) test_nattr_flag(na, BeingNonResident)
#define NAttrSetBeingNonResident(na) set_nattr_flag(na, BeingNonResident)
#define NAttrClearBeingNonResident(na) clear_nattr_flag(na, BeingNonResident)
#define NAttrFullyMapped(na) test_nattr_flag(na, FullyMapped)
#define NAttrSetFullyMapped(na) set_nattr_flag(na, FullyMapped)
#define NAttrClearFullyMapped(na) clear_nattr_flag(na, FullyMapped)
#define NAttrComprClosing(na) test_nattr_flag(na, ComprClosing)
#define NAttrSetComprClosing(na) set_nattr_flag(na, ComprClosing)
#define NAttrClearComprClosing(na) clear_nattr_flag(na, ComprClosing)
#define GenNAttrIno(func_name, flag) \
extern int NAttr##func_name(ntfs_attr *na); \
extern void NAttrSet##func_name(ntfs_attr *na); \
extern void NAttrClear##func_name(ntfs_attr *na);
GenNAttrIno(Compressed, FILE_ATTR_COMPRESSED)
GenNAttrIno(Encrypted, FILE_ATTR_ENCRYPTED)
GenNAttrIno(Sparse, FILE_ATTR_SPARSE_FILE)
#undef GenNAttrIno
/**
* union attr_val - Union of all known attribute values
*
* For convenience. Used in the attr structure.
*/
typedef union {
u8 _default; /* Unnamed u8 to serve as default when just using
a_val without specifying any of the below. */
STANDARD_INFORMATION std_inf;
ATTR_LIST_ENTRY al_entry;
FILE_NAME_ATTR filename;
OBJECT_ID_ATTR obj_id;
SECURITY_DESCRIPTOR_ATTR sec_desc;
VOLUME_NAME vol_name;
VOLUME_INFORMATION vol_inf;
DATA_ATTR data;
INDEX_ROOT index_root;
INDEX_BLOCK index_blk;
BITMAP_ATTR bmp;
REPARSE_POINT reparse;
EA_INFORMATION ea_inf;
EA_ATTR ea;
PROPERTY_SET property_set;
LOGGED_UTILITY_STREAM logged_util_stream;
EFS_ATTR_HEADER efs;
} attr_val;
extern void ntfs_attr_init(ntfs_attr *na, const BOOL non_resident,
const ATTR_FLAGS data_flags, const BOOL encrypted,
const BOOL sparse,
const s64 allocated_size, const s64 data_size,
const s64 initialized_size, const s64 compressed_size,
const u8 compression_unit);
/* warning : in the following "name" has to be freeable */
/* or one of constants AT_UNNAMED, NTFS_INDEX_I30 or STREAM_SDS */
extern ntfs_attr *ntfs_attr_open(ntfs_inode *ni, const ATTR_TYPES type,
ntfschar *name, u32 name_len);
extern void ntfs_attr_close(ntfs_attr *na);
extern s64 ntfs_attr_pread(ntfs_attr *na, const s64 pos, s64 count,
void *b);
extern s64 ntfs_attr_pwrite(ntfs_attr *na, const s64 pos, s64 count,
const void *b);
extern int ntfs_attr_pclose(ntfs_attr *na);
extern void *ntfs_attr_readall(ntfs_inode *ni, const ATTR_TYPES type,
ntfschar *name, u32 name_len, s64 *data_size);
extern s64 ntfs_attr_mst_pread(ntfs_attr *na, const s64 pos,
const s64 bk_cnt, const u32 bk_size, void *dst);
extern s64 ntfs_attr_mst_pwrite(ntfs_attr *na, const s64 pos,
s64 bk_cnt, const u32 bk_size, void *src);
extern int ntfs_attr_map_runlist(ntfs_attr *na, VCN vcn);
extern int ntfs_attr_map_whole_runlist(ntfs_attr *na);
extern LCN ntfs_attr_vcn_to_lcn(ntfs_attr *na, const VCN vcn);
extern runlist_element *ntfs_attr_find_vcn(ntfs_attr *na, const VCN vcn);
extern int ntfs_attr_size_bounds_check(const ntfs_volume *vol,
const ATTR_TYPES type, const s64 size);
extern int ntfs_attr_can_be_resident(const ntfs_volume *vol,
const ATTR_TYPES type);
int ntfs_attr_make_non_resident(ntfs_attr *na,
ntfs_attr_search_ctx *ctx);
int ntfs_attr_force_non_resident(ntfs_attr *na);
extern int ntfs_make_room_for_attr(MFT_RECORD *m, u8 *pos, u32 size);
extern int ntfs_resident_attr_record_add(ntfs_inode *ni, ATTR_TYPES type,
ntfschar *name, u8 name_len, u8 *val, u32 size,
ATTR_FLAGS flags);
extern int ntfs_non_resident_attr_record_add(ntfs_inode *ni, ATTR_TYPES type,
ntfschar *name, u8 name_len, VCN lowest_vcn, int dataruns_size,
ATTR_FLAGS flags);
extern int ntfs_attr_record_rm(ntfs_attr_search_ctx *ctx);
extern int ntfs_attr_add(ntfs_inode *ni, ATTR_TYPES type,
ntfschar *name, u8 name_len, u8 *val, s64 size);
extern int ntfs_attr_set_flags(ntfs_inode *ni, ATTR_TYPES type,
ntfschar *name, u8 name_len, ATTR_FLAGS flags, ATTR_FLAGS mask);
extern int ntfs_attr_rm(ntfs_attr *na);
extern int ntfs_attr_record_resize(MFT_RECORD *m, ATTR_RECORD *a, u32 new_size);
extern int ntfs_resident_attr_value_resize(MFT_RECORD *m, ATTR_RECORD *a,
const u32 new_size);
extern int ntfs_attr_record_move_to(ntfs_attr_search_ctx *ctx, ntfs_inode *ni);
extern int ntfs_attr_record_move_away(ntfs_attr_search_ctx *ctx, int extra);
extern int ntfs_attr_update_mapping_pairs(ntfs_attr *na, VCN from_vcn);
extern int ntfs_attr_truncate(ntfs_attr *na, const s64 newsize);
/**
* get_attribute_value_length - return the length of the value of an attribute
* @a: pointer to a buffer containing the attribute record
*
* Return the byte size of the attribute value of the attribute @a (as it
* would be after eventual decompression and filling in of holes if sparse).
* If we return 0, check errno. If errno is 0 the actual length was 0,
* otherwise errno describes the error.
*
* FIXME: Describe possible errnos.
*/
extern s64 ntfs_get_attribute_value_length(const ATTR_RECORD *a);
/**
* get_attribute_value - return the attribute value of an attribute
* @vol: volume on which the attribute is present
* @a: attribute to get the value of
* @b: destination buffer for the attribute value
*
* Make a copy of the attribute value of the attribute @a into the destination
* buffer @b. Note, that the size of @b has to be at least equal to the value
* returned by get_attribute_value_length(@a).
*
* Return number of bytes copied. If this is zero check errno. If errno is 0
* then nothing was read due to a zero-length attribute value, otherwise
* errno describes the error.
*/
extern s64 ntfs_get_attribute_value(const ntfs_volume *vol,
const ATTR_RECORD *a, u8 *b);
extern void ntfs_attr_name_free(char **name);
extern char *ntfs_attr_name_get(const ntfschar *uname, const int uname_len);
extern int ntfs_attr_exist(ntfs_inode *ni, const ATTR_TYPES type,
ntfschar *name, u32 name_len);
extern int ntfs_attr_remove(ntfs_inode *ni, const ATTR_TYPES type,
ntfschar *name, u32 name_len);
extern s64 ntfs_attr_get_free_bits(ntfs_attr *na);
#endif /* defined _NTFS_ATTRIB_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,314 +0,0 @@
/**
* attrlist.c - Attribute list attribute handling code. Originated from the Linux-NTFS
* project.
*
* Copyright (c) 2004-2005 Anton Altaparmakov
* Copyright (c) 2004-2005 Yura Pakhuchiy
* Copyright (c) 2006 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include "types.h"
#include "layout.h"
#include "attrib.h"
#include "attrlist.h"
#include "debug.h"
#include "unistr.h"
#include "logging.h"
#include "misc.h"
/**
* ntfs_attrlist_need - check whether inode need attribute list
* @ni: opened ntfs inode for which perform check
*
* Check whether all are attributes belong to one MFT record, in that case
* attribute list is not needed.
*
* Return 1 if inode need attribute list, 0 if not, -1 on error with errno set
* to the error code. If function succeed errno set to 0. The following error
* codes are defined:
* EINVAL - Invalid arguments passed to function or attribute haven't got
* attribute list.
*/
int ntfs_attrlist_need(ntfs_inode *ni)
{
ATTR_LIST_ENTRY *ale;
if (!ni) {
ntfs_log_trace("Invalid arguments.\n");
errno = EINVAL;
return -1;
}
ntfs_log_trace("Entering for inode 0x%llx.\n", (long long) ni->mft_no);
if (!NInoAttrList(ni)) {
ntfs_log_trace("Inode haven't got attribute list.\n");
errno = EINVAL;
return -1;
}
if (!ni->attr_list) {
ntfs_log_trace("Corrupt in-memory struct.\n");
errno = EINVAL;
return -1;
}
errno = 0;
ale = (ATTR_LIST_ENTRY *)ni->attr_list;
while ((u8*)ale < ni->attr_list + ni->attr_list_size) {
if (MREF_LE(ale->mft_reference) != ni->mft_no)
return 1;
ale = (ATTR_LIST_ENTRY *)((u8*)ale + le16_to_cpu(ale->length));
}
return 0;
}
/**
* ntfs_attrlist_entry_add - add an attribute list attribute entry
* @ni: opened ntfs inode, which contains that attribute
* @attr: attribute record to add to attribute list
*
* Return 0 on success and -1 on error with errno set to the error code. The
* following error codes are defined:
* EINVAL - Invalid arguments passed to function.
* ENOMEM - Not enough memory to allocate necessary buffers.
* EIO - I/O error occurred or damaged filesystem.
* EEXIST - Such attribute already present in attribute list.
*/
int ntfs_attrlist_entry_add(ntfs_inode *ni, ATTR_RECORD *attr)
{
ATTR_LIST_ENTRY *ale;
MFT_REF mref;
ntfs_attr *na = NULL;
ntfs_attr_search_ctx *ctx;
u8 *new_al;
int entry_len, entry_offset, err;
ntfs_log_trace("Entering for inode 0x%llx, attr 0x%x.\n",
(long long) ni->mft_no,
(unsigned) le32_to_cpu(attr->type));
if (!ni || !attr) {
ntfs_log_trace("Invalid arguments.\n");
errno = EINVAL;
return -1;
}
mref = MK_LE_MREF(ni->mft_no, le16_to_cpu(ni->mrec->sequence_number));
if (ni->nr_extents == -1)
ni = ni->base_ni;
if (!NInoAttrList(ni)) {
ntfs_log_trace("Attribute list isn't present.\n");
errno = ENOENT;
return -1;
}
/* Determine size and allocate memory for new attribute list. */
entry_len = (sizeof(ATTR_LIST_ENTRY) + sizeof(ntfschar) *
attr->name_length + 7) & ~7;
new_al = ntfs_calloc(ni->attr_list_size + entry_len);
if (!new_al)
return -1;
/* Find place for the new entry. */
ctx = ntfs_attr_get_search_ctx(ni, NULL);
if (!ctx) {
err = errno;
goto err_out;
}
if (!ntfs_attr_lookup(attr->type, (attr->name_length) ? (ntfschar*)
((u8*)attr + le16_to_cpu(attr->name_offset)) :
AT_UNNAMED, attr->name_length, CASE_SENSITIVE,
(attr->non_resident) ? le64_to_cpu(attr->lowest_vcn) :
0, (attr->non_resident) ? NULL : ((u8*)attr +
le16_to_cpu(attr->value_offset)), (attr->non_resident) ?
0 : le32_to_cpu(attr->value_length), ctx)) {
/* Found some extent, check it to be before new extent. */
if (ctx->al_entry->lowest_vcn == attr->lowest_vcn) {
err = EEXIST;
ntfs_log_trace("Such attribute already present in the "
"attribute list.\n");
ntfs_attr_put_search_ctx(ctx);
goto err_out;
}
/* Add new entry after this extent. */
ale = (ATTR_LIST_ENTRY*)((u8*)ctx->al_entry +
le16_to_cpu(ctx->al_entry->length));
} else {
/* Check for real errors. */
if (errno != ENOENT) {
err = errno;
ntfs_log_trace("Attribute lookup failed.\n");
ntfs_attr_put_search_ctx(ctx);
goto err_out;
}
/* No previous extents found. */
ale = ctx->al_entry;
}
/* Don't need it anymore, @ctx->al_entry points to @ni->attr_list. */
ntfs_attr_put_search_ctx(ctx);
/* Determine new entry offset. */
entry_offset = ((u8 *)ale - ni->attr_list);
/* Set pointer to new entry. */
ale = (ATTR_LIST_ENTRY *)(new_al + entry_offset);
/* Zero it to fix valgrind warning. */
memset(ale, 0, entry_len);
/* Form new entry. */
ale->type = attr->type;
ale->length = cpu_to_le16(entry_len);
ale->name_length = attr->name_length;
ale->name_offset = offsetof(ATTR_LIST_ENTRY, name);
if (attr->non_resident)
ale->lowest_vcn = attr->lowest_vcn;
else
ale->lowest_vcn = 0;
ale->mft_reference = mref;
ale->instance = attr->instance;
memcpy(ale->name, (u8 *)attr + le16_to_cpu(attr->name_offset),
attr->name_length * sizeof(ntfschar));
/* Resize $ATTRIBUTE_LIST to new length. */
na = ntfs_attr_open(ni, AT_ATTRIBUTE_LIST, AT_UNNAMED, 0);
if (!na) {
err = errno;
ntfs_log_trace("Failed to open $ATTRIBUTE_LIST attribute.\n");
goto err_out;
}
if (ntfs_attr_truncate(na, ni->attr_list_size + entry_len)) {
err = errno;
ntfs_log_trace("$ATTRIBUTE_LIST resize failed.\n");
goto err_out;
}
/* Copy entries from old attribute list to new. */
memcpy(new_al, ni->attr_list, entry_offset);
memcpy(new_al + entry_offset + entry_len, ni->attr_list +
entry_offset, ni->attr_list_size - entry_offset);
/* Set new runlist. */
free(ni->attr_list);
ni->attr_list = new_al;
ni->attr_list_size = ni->attr_list_size + entry_len;
NInoAttrListSetDirty(ni);
/* Done! */
ntfs_attr_close(na);
return 0;
err_out:
if (na)
ntfs_attr_close(na);
free(new_al);
errno = err;
return -1;
}
/**
* ntfs_attrlist_entry_rm - remove an attribute list attribute entry
* @ctx: attribute search context describing the attribute list entry
*
* Remove the attribute list entry @ctx->al_entry from the attribute list.
*
* Return 0 on success and -1 on error with errno set to the error code.
*/
int ntfs_attrlist_entry_rm(ntfs_attr_search_ctx *ctx)
{
u8 *new_al;
int new_al_len;
ntfs_inode *base_ni;
ntfs_attr *na;
ATTR_LIST_ENTRY *ale;
int err;
if (!ctx || !ctx->ntfs_ino || !ctx->al_entry) {
ntfs_log_trace("Invalid arguments.\n");
errno = EINVAL;
return -1;
}
if (ctx->base_ntfs_ino)
base_ni = ctx->base_ntfs_ino;
else
base_ni = ctx->ntfs_ino;
ale = ctx->al_entry;
ntfs_log_trace("Entering for inode 0x%llx, attr 0x%x, lowest_vcn %lld.\n",
(long long) ctx->ntfs_ino->mft_no,
(unsigned) le32_to_cpu(ctx->al_entry->type),
(long long) le64_to_cpu(ctx->al_entry->lowest_vcn));
if (!NInoAttrList(base_ni)) {
ntfs_log_trace("Attribute list isn't present.\n");
errno = ENOENT;
return -1;
}
/* Allocate memory for new attribute list. */
new_al_len = base_ni->attr_list_size - le16_to_cpu(ale->length);
new_al = ntfs_calloc(new_al_len);
if (!new_al)
return -1;
/* Reisze $ATTRIBUTE_LIST to new length. */
na = ntfs_attr_open(base_ni, AT_ATTRIBUTE_LIST, AT_UNNAMED, 0);
if (!na) {
err = errno;
ntfs_log_trace("Failed to open $ATTRIBUTE_LIST attribute.\n");
goto err_out;
}
if (ntfs_attr_truncate(na, new_al_len)) {
err = errno;
ntfs_log_trace("$ATTRIBUTE_LIST resize failed.\n");
goto err_out;
}
/* Copy entries from old attribute list to new. */
memcpy(new_al, base_ni->attr_list, (u8*)ale - base_ni->attr_list);
memcpy(new_al + ((u8*)ale - base_ni->attr_list), (u8*)ale + le16_to_cpu(
ale->length), new_al_len - ((u8*)ale - base_ni->attr_list));
/* Set new runlist. */
free(base_ni->attr_list);
base_ni->attr_list = new_al;
base_ni->attr_list_size = new_al_len;
NInoAttrListSetDirty(base_ni);
/* Done! */
ntfs_attr_close(na);
return 0;
err_out:
if (na)
ntfs_attr_close(na);
free(new_al);
errno = err;
return -1;
}

View File

@ -1,51 +0,0 @@
/*
* attrlist.h - Exports for attribute list attribute handling.
* Originated from Linux-NTFS project.
*
* Copyright (c) 2004 Anton Altaparmakov
* Copyright (c) 2004 Yura Pakhuchiy
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_ATTRLIST_H
#define _NTFS_ATTRLIST_H
#include "attrib.h"
extern int ntfs_attrlist_need(ntfs_inode *ni);
extern int ntfs_attrlist_entry_add(ntfs_inode *ni, ATTR_RECORD *attr);
extern int ntfs_attrlist_entry_rm(ntfs_attr_search_ctx *ctx);
/**
* ntfs_attrlist_mark_dirty - set the attribute list dirty
* @ni: ntfs inode which base inode contain dirty attribute list
*
* Set the attribute list dirty so it is written out later (at the latest at
* ntfs_inode_close() time).
*
* This function cannot fail.
*/
static __inline__ void ntfs_attrlist_mark_dirty(ntfs_inode *ni)
{
if (ni->nr_extents == -1)
NInoAttrListSetDirty(ni->base_ni);
else
NInoAttrListSetDirty(ni);
}
#endif /* defined _NTFS_ATTRLIST_H */

View File

@ -1,57 +0,0 @@
/*
bit_ops.h
Functions for dealing with conversion of data between types
Copyright (c) 2006 Michael "Chishm" Chisholm
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _BIT_OPS_H
#define _BIT_OPS_H
#include <stdint.h>
/*-----------------------------------------------------------------
Functions to deal with little endian values stored in uint8_t arrays
-----------------------------------------------------------------*/
static inline uint16_t u8array_to_u16 (const uint8_t* item, int offset) {
return ( item[offset] | (item[offset + 1] << 8));
}
static inline uint32_t u8array_to_u32 (const uint8_t* item, int offset) {
return ( item[offset] | (item[offset + 1] << 8) | (item[offset + 2] << 16) | (item[offset + 3] << 24));
}
static inline void u16_to_u8array (uint8_t* item, int offset, uint16_t value) {
item[offset] = (uint8_t) value;
item[offset + 1] = (uint8_t)(value >> 8);
}
static inline void u32_to_u8array (uint8_t* item, int offset, uint32_t value) {
item[offset] = (uint8_t) value;
item[offset + 1] = (uint8_t)(value >> 8);
item[offset + 2] = (uint8_t)(value >> 16);
item[offset + 3] = (uint8_t)(value >> 24);
}
#endif // _BIT_OPS_H

View File

@ -1,300 +0,0 @@
/**
* bitmap.c - Bitmap handling code. Originated from the Linux-NTFS project.
*
* Copyright (c) 2002-2006 Anton Altaparmakov
* Copyright (c) 2004-2005 Richard Russon
* Copyright (c) 2004-2008 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include "types.h"
#include "attrib.h"
#include "bitmap.h"
#include "debug.h"
#include "logging.h"
#include "misc.h"
/**
* ntfs_bit_set - set a bit in a field of bits
* @bitmap: field of bits
* @bit: bit to set
* @new_value: value to set bit to (0 or 1)
*
* Set the bit @bit in the @bitmap to @new_value. Ignore all errors.
*/
void ntfs_bit_set(u8 *bitmap, const u64 bit, const u8 new_value)
{
if (!bitmap || new_value > 1)
return;
if (!new_value)
bitmap[bit >> 3] &= ~(1 << (bit & 7));
else
bitmap[bit >> 3] |= (1 << (bit & 7));
}
/**
* ntfs_bit_get - get value of a bit in a field of bits
* @bitmap: field of bits
* @bit: bit to get
*
* Get and return the value of the bit @bit in @bitmap (0 or 1).
* Return -1 on error.
*/
char ntfs_bit_get(const u8 *bitmap, const u64 bit)
{
if (!bitmap)
return -1;
return (bitmap[bit >> 3] >> (bit & 7)) & 1;
}
/**
* ntfs_bit_get_and_set - get value of a bit in a field of bits and set it
* @bitmap: field of bits
* @bit: bit to get/set
* @new_value: value to set bit to (0 or 1)
*
* Return the value of the bit @bit and set it to @new_value (0 or 1).
* Return -1 on error.
*/
char ntfs_bit_get_and_set(u8 *bitmap, const u64 bit, const u8 new_value)
{
register u8 old_bit, shift;
if (!bitmap || new_value > 1)
return -1;
shift = bit & 7;
old_bit = (bitmap[bit >> 3] >> shift) & 1;
if (new_value != old_bit)
bitmap[bit >> 3] ^= 1 << shift;
return old_bit;
}
/**
* ntfs_bitmap_set_bits_in_run - set a run of bits in a bitmap to a value
* @na: attribute containing the bitmap
* @start_bit: first bit to set
* @count: number of bits to set
* @value: value to set the bits to (i.e. 0 or 1)
*
* Set @count bits starting at bit @start_bit in the bitmap described by the
* attribute @na to @value, where @value is either 0 or 1.
*
* On success return 0 and on error return -1 with errno set to the error code.
*/
static int ntfs_bitmap_set_bits_in_run(ntfs_attr *na, s64 start_bit,
s64 count, int value)
{
s64 bufsize, br;
u8 *buf, *lastbyte_buf;
int bit, firstbyte, lastbyte, lastbyte_pos, tmp, ret = -1;
if (!na || start_bit < 0 || count < 0) {
errno = EINVAL;
ntfs_log_perror("%s: Invalid argument (%p, %lld, %lld)",
__FUNCTION__, na, (long long)start_bit, (long long)count);
return -1;
}
bit = start_bit & 7;
if (bit)
firstbyte = 1;
else
firstbyte = 0;
/* Calculate the required buffer size in bytes, capping it at 8kiB. */
bufsize = ((count - (bit ? 8 - bit : 0) + 7) >> 3) + firstbyte;
if (bufsize > 8192)
bufsize = 8192;
buf = ntfs_malloc(bufsize);
if (!buf)
return -1;
/* Depending on @value, zero or set all bits in the allocated buffer. */
memset(buf, value ? 0xff : 0, bufsize);
/* If there is a first partial byte... */
if (bit) {
/* read it in... */
br = ntfs_attr_pread(na, start_bit >> 3, 1, buf);
if (br != 1) {
if (br >= 0)
errno = EIO;
goto free_err_out;
}
/* and set or clear the appropriate bits in it. */
while ((bit & 7) && count--) {
if (value)
*buf |= 1 << bit++;
else
*buf &= ~(1 << bit++);
}
/* Update @start_bit to the new position. */
start_bit = (start_bit + 7) & ~7;
}
/* Loop until @count reaches zero. */
lastbyte = 0;
lastbyte_buf = NULL;
bit = count & 7;
do {
/* If there is a last partial byte... */
if (count > 0 && bit) {
lastbyte_pos = ((count + 7) >> 3) + firstbyte;
if (!lastbyte_pos) {
// FIXME: Eeek! BUG!
ntfs_log_error("Lastbyte is zero. Leaving "
"inconsistent metadata.\n");
errno = EIO;
goto free_err_out;
}
/* and it is in the currently loaded bitmap window... */
if (lastbyte_pos <= bufsize) {
lastbyte_buf = buf + lastbyte_pos - 1;
/* read the byte in... */
br = ntfs_attr_pread(na, (start_bit + count) >>
3, 1, lastbyte_buf);
if (br != 1) {
// FIXME: Eeek! We need rollback! (AIA)
if (br >= 0)
errno = EIO;
ntfs_log_perror("Reading of last byte "
"failed (%lld). Leaving inconsistent "
"metadata", (long long)br);
goto free_err_out;
}
/* and set/clear the appropriate bits in it. */
while (bit && count--) {
if (value)
*lastbyte_buf |= 1 << --bit;
else
*lastbyte_buf &= ~(1 << --bit);
}
/* We don't want to come back here... */
bit = 0;
/* We have a last byte that we have handled. */
lastbyte = 1;
}
}
/* Write the prepared buffer to disk. */
tmp = (start_bit >> 3) - firstbyte;
br = ntfs_attr_pwrite(na, tmp, bufsize, buf);
if (br != bufsize) {
// FIXME: Eeek! We need rollback! (AIA)
if (br >= 0)
errno = EIO;
ntfs_log_perror("Failed to write buffer to bitmap "
"(%lld != %lld). Leaving inconsistent metadata",
(long long)br, (long long)bufsize);
goto free_err_out;
}
/* Update counters. */
tmp = (bufsize - firstbyte - lastbyte) << 3;
if (firstbyte) {
firstbyte = 0;
/*
* Re-set the partial first byte so a subsequent write
* of the buffer does not have stale, incorrect bits.
*/
*buf = value ? 0xff : 0;
}
start_bit += tmp;
count -= tmp;
if (bufsize > (tmp = (count + 7) >> 3))
bufsize = tmp;
if (lastbyte && count != 0) {
// FIXME: Eeek! BUG!
ntfs_log_error("Last buffer but count is not zero "
"(%lld). Leaving inconsistent metadata.\n",
(long long)count);
errno = EIO;
goto free_err_out;
}
} while (count > 0);
ret = 0;
free_err_out:
free(buf);
return ret;
}
/**
* ntfs_bitmap_set_run - set a run of bits in a bitmap
* @na: attribute containing the bitmap
* @start_bit: first bit to set
* @count: number of bits to set
*
* Set @count bits starting at bit @start_bit in the bitmap described by the
* attribute @na.
*
* On success return 0 and on error return -1 with errno set to the error code.
*/
int ntfs_bitmap_set_run(ntfs_attr *na, s64 start_bit, s64 count)
{
int ret;
ntfs_log_enter("Set from bit %lld, count %lld\n",
(long long)start_bit, (long long)count);
ret = ntfs_bitmap_set_bits_in_run(na, start_bit, count, 1);
ntfs_log_leave("\n");
return ret;
}
/**
* ntfs_bitmap_clear_run - clear a run of bits in a bitmap
* @na: attribute containing the bitmap
* @start_bit: first bit to clear
* @count: number of bits to clear
*
* Clear @count bits starting at bit @start_bit in the bitmap described by the
* attribute @na.
*
* On success return 0 and on error return -1 with errno set to the error code.
*/
int ntfs_bitmap_clear_run(ntfs_attr *na, s64 start_bit, s64 count)
{
int ret;
ntfs_log_enter("Clear from bit %lld, count %lld\n",
(long long)start_bit, (long long)count);
ret = ntfs_bitmap_set_bits_in_run(na, start_bit, count, 0);
ntfs_log_leave("\n");
return ret;
}

View File

@ -1,96 +0,0 @@
/*
* bitmap.h - Exports for bitmap handling. Originated from the Linux-NTFS project.
*
* Copyright (c) 2000-2004 Anton Altaparmakov
* Copyright (c) 2004-2005 Richard Russon
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_BITMAP_H
#define _NTFS_BITMAP_H
#include "types.h"
#include "attrib.h"
/*
* NOTES:
*
* - Operations are 8-bit only to ensure the functions work both on little
* and big endian machines! So don't make them 32-bit ops!
* - bitmap starts at bit = 0 and ends at bit = bitmap size - 1.
* - _Caller_ has to make sure that the bit to operate on is less than the
* size of the bitmap.
*/
extern void ntfs_bit_set(u8 *bitmap, const u64 bit, const u8 new_value);
extern char ntfs_bit_get(const u8 *bitmap, const u64 bit);
extern char ntfs_bit_get_and_set(u8 *bitmap, const u64 bit, const u8 new_value);
extern int ntfs_bitmap_set_run(ntfs_attr *na, s64 start_bit, s64 count);
extern int ntfs_bitmap_clear_run(ntfs_attr *na, s64 start_bit, s64 count);
/**
* ntfs_bitmap_set_bit - set a bit in a bitmap
* @na: attribute containing the bitmap
* @bit: bit to set
*
* Set the @bit in the bitmap described by the attribute @na.
*
* On success return 0 and on error return -1 with errno set to the error code.
*/
static __inline__ int ntfs_bitmap_set_bit(ntfs_attr *na, s64 bit)
{
return ntfs_bitmap_set_run(na, bit, 1);
}
/**
* ntfs_bitmap_clear_bit - clear a bit in a bitmap
* @na: attribute containing the bitmap
* @bit: bit to clear
*
* Clear @bit in the bitmap described by the attribute @na.
*
* On success return 0 and on error return -1 with errno set to the error code.
*/
static __inline__ int ntfs_bitmap_clear_bit(ntfs_attr *na, s64 bit)
{
return ntfs_bitmap_clear_run(na, bit, 1);
}
/*
* rol32 - rotate a 32-bit value left
*
* @word: value to rotate
* @shift: bits to roll
*/
static __inline__ u32 ntfs_rol32(u32 word, unsigned int shift)
{
return (word << shift) | (word >> (32 - shift));
}
/*
* ror32 - rotate a 32-bit value right
*
* @word: value to rotate
* @shift: bits to roll
*/
static __inline__ u32 ntfs_ror32(u32 word, unsigned int shift)
{
return (word >> shift) | (word << (32 - shift));
}
#endif /* defined _NTFS_BITMAP_H */

View File

@ -1,285 +0,0 @@
/**
* bootsect.c - Boot sector handling code. Originated from the Linux-NTFS project.
*
* Copyright (c) 2000-2006 Anton Altaparmakov
* Copyright (c) 2003-2008 Szabolcs Szakacsits
* Copyright (c) 2005 Yura Pakhuchiy
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include "compat.h"
#include "bootsect.h"
#include "debug.h"
#include "logging.h"
/**
* ntfs_boot_sector_is_ntfs - check if buffer contains a valid ntfs boot sector
* @b: buffer containing putative boot sector to analyze
* @silent: if zero, output progress messages to stderr
*
* Check if the buffer @b contains a valid ntfs boot sector. The buffer @b
* must be at least 512 bytes in size.
*
* If @silent is zero, output progress messages to stderr. Otherwise, do not
* output any messages (except when configured with --enable-debug in which
* case warning/debug messages may be displayed).
*
* Return TRUE if @b contains a valid ntfs boot sector and FALSE if not.
*/
BOOL ntfs_boot_sector_is_ntfs(NTFS_BOOT_SECTOR *b)
{
u32 i;
BOOL ret = FALSE;
ntfs_log_debug("Beginning bootsector check.\n");
ntfs_log_debug("Checking OEMid, NTFS signature.\n");
if (b->oem_id != cpu_to_le64(0x202020205346544eULL)) { /* "NTFS " */
ntfs_log_error("NTFS signature is missing.\n");
goto not_ntfs;
}
ntfs_log_debug("Checking bytes per sector.\n");
if (le16_to_cpu(b->bpb.bytes_per_sector) < 256 ||
le16_to_cpu(b->bpb.bytes_per_sector) > 4096) {
ntfs_log_error("Unexpected bytes per sector value (%d).\n",
le16_to_cpu(b->bpb.bytes_per_sector));
goto not_ntfs;
}
ntfs_log_debug("Checking sectors per cluster.\n");
switch (b->bpb.sectors_per_cluster) {
case 1: case 2: case 4: case 8: case 16: case 32: case 64: case 128:
break;
default:
ntfs_log_error("Unexpected sectors per cluster value (%d).\n",
b->bpb.sectors_per_cluster);
goto not_ntfs;
}
ntfs_log_debug("Checking cluster size.\n");
i = (u32)le16_to_cpu(b->bpb.bytes_per_sector) *
b->bpb.sectors_per_cluster;
if (i > 65536) {
ntfs_log_error("Unexpected cluster size (%d).\n", i);
goto not_ntfs;
}
ntfs_log_debug("Checking reserved fields are zero.\n");
if (le16_to_cpu(b->bpb.reserved_sectors) ||
le16_to_cpu(b->bpb.root_entries) ||
le16_to_cpu(b->bpb.sectors) ||
le16_to_cpu(b->bpb.sectors_per_fat) ||
le32_to_cpu(b->bpb.large_sectors) ||
b->bpb.fats) {
ntfs_log_error("Reserved fields aren't zero "
"(%d, %d, %d, %d, %d, %d).\n",
le16_to_cpu(b->bpb.reserved_sectors),
le16_to_cpu(b->bpb.root_entries),
le16_to_cpu(b->bpb.sectors),
le16_to_cpu(b->bpb.sectors_per_fat),
le32_to_cpu(b->bpb.large_sectors),
b->bpb.fats);
goto not_ntfs;
}
ntfs_log_debug("Checking clusters per mft record.\n");
if ((u8)b->clusters_per_mft_record < 0xe1 ||
(u8)b->clusters_per_mft_record > 0xf7) {
switch (b->clusters_per_mft_record) {
case 1: case 2: case 4: case 8: case 0x10: case 0x20: case 0x40:
break;
default:
ntfs_log_error("Unexpected clusters per mft record "
"(%d).\n", b->clusters_per_mft_record);
goto not_ntfs;
}
}
ntfs_log_debug("Checking clusters per index block.\n");
if ((u8)b->clusters_per_index_record < 0xe1 ||
(u8)b->clusters_per_index_record > 0xf7) {
switch (b->clusters_per_index_record) {
case 1: case 2: case 4: case 8: case 0x10: case 0x20: case 0x40:
break;
default:
ntfs_log_error("Unexpected clusters per index record "
"(%d).\n", b->clusters_per_index_record);
goto not_ntfs;
}
}
if (b->end_of_sector_marker != cpu_to_le16(0xaa55))
ntfs_log_debug("Warning: Bootsector has invalid end of sector "
"marker.\n");
ntfs_log_debug("Bootsector check completed successfully.\n");
ret = TRUE;
not_ntfs:
return ret;
}
static const char *last_sector_error =
"HINTS: Either the volume is a RAID/LDM but it wasn't setup yet,\n"
" or it was not setup correctly (e.g. by not using mdadm --build ...),\n"
" or a wrong device is tried to be mounted,\n"
" or the partition table is corrupt (partition is smaller than NTFS),\n"
" or the NTFS boot sector is corrupt (NTFS size is not valid).\n";
/**
* ntfs_boot_sector_parse - setup an ntfs volume from an ntfs boot sector
* @vol: ntfs_volume to setup
* @bs: buffer containing ntfs boot sector to parse
*
* Parse the ntfs bootsector @bs and setup the ntfs volume @vol with the
* obtained values.
*
* Return 0 on success or -1 on error with errno set to the error code EINVAL.
*/
int ntfs_boot_sector_parse(ntfs_volume *vol, const NTFS_BOOT_SECTOR *bs)
{
s64 sectors;
u8 sectors_per_cluster;
s8 c;
/* We return -1 with errno = EINVAL on error. */
errno = EINVAL;
vol->sector_size = le16_to_cpu(bs->bpb.bytes_per_sector);
vol->sector_size_bits = ffs(vol->sector_size) - 1;
ntfs_log_debug("SectorSize = 0x%x\n", vol->sector_size);
ntfs_log_debug("SectorSizeBits = %u\n", vol->sector_size_bits);
/*
* The bounds checks on mft_lcn and mft_mirr_lcn (i.e. them being
* below or equal the number_of_clusters) really belong in the
* ntfs_boot_sector_is_ntfs but in this way we can just do this once.
*/
sectors_per_cluster = bs->bpb.sectors_per_cluster;
ntfs_log_debug("SectorsPerCluster = 0x%x\n", sectors_per_cluster);
if (sectors_per_cluster & (sectors_per_cluster - 1)) {
ntfs_log_error("sectors_per_cluster (%d) is not a power of 2."
"\n", sectors_per_cluster);
return -1;
}
sectors = sle64_to_cpu(bs->number_of_sectors);
ntfs_log_debug("NumberOfSectors = %lld\n", (long long)sectors);
if (!sectors) {
ntfs_log_error("Volume size is set to zero.\n");
return -1;
}
if (vol->dev->d_ops->seek(vol->dev,
(sectors - 1) << vol->sector_size_bits,
SEEK_SET) == -1) {
ntfs_log_perror("Failed to read last sector (%lld)",
(long long)sectors);
ntfs_log_error("%s", last_sector_error);
return -1;
}
vol->nr_clusters = sectors >> (ffs(sectors_per_cluster) - 1);
vol->mft_lcn = sle64_to_cpu(bs->mft_lcn);
vol->mftmirr_lcn = sle64_to_cpu(bs->mftmirr_lcn);
ntfs_log_debug("MFT LCN = %lld\n", (long long)vol->mft_lcn);
ntfs_log_debug("MFTMirr LCN = %lld\n", (long long)vol->mftmirr_lcn);
if (vol->mft_lcn > vol->nr_clusters ||
vol->mftmirr_lcn > vol->nr_clusters) {
ntfs_log_error("$MFT LCN (%lld) or $MFTMirr LCN (%lld) is "
"greater than the number of clusters (%lld).\n",
(long long)vol->mft_lcn, (long long)vol->mftmirr_lcn,
(long long)vol->nr_clusters);
return -1;
}
vol->cluster_size = sectors_per_cluster * vol->sector_size;
if (vol->cluster_size & (vol->cluster_size - 1)) {
ntfs_log_error("cluster_size (%d) is not a power of 2.\n",
vol->cluster_size);
return -1;
}
vol->cluster_size_bits = ffs(vol->cluster_size) - 1;
/*
* Need to get the clusters per mft record and handle it if it is
* negative. Then calculate the mft_record_size. A value of 0x80 is
* illegal, thus signed char is actually ok!
*/
c = bs->clusters_per_mft_record;
ntfs_log_debug("ClusterSize = 0x%x\n", (unsigned)vol->cluster_size);
ntfs_log_debug("ClusterSizeBits = %u\n", vol->cluster_size_bits);
ntfs_log_debug("ClustersPerMftRecord = 0x%x\n", c);
/*
* When clusters_per_mft_record is negative, it means that it is to
* be taken to be the negative base 2 logarithm of the mft_record_size
* min bytes. Then:
* mft_record_size = 2^(-clusters_per_mft_record) bytes.
*/
if (c < 0)
vol->mft_record_size = 1 << -c;
else
vol->mft_record_size = c << vol->cluster_size_bits;
if (vol->mft_record_size & (vol->mft_record_size - 1)) {
ntfs_log_error("mft_record_size (%d) is not a power of 2.\n",
vol->mft_record_size);
return -1;
}
vol->mft_record_size_bits = ffs(vol->mft_record_size) - 1;
ntfs_log_debug("MftRecordSize = 0x%x\n", (unsigned)vol->mft_record_size);
ntfs_log_debug("MftRecordSizeBits = %u\n", vol->mft_record_size_bits);
/* Same as above for INDX record. */
c = bs->clusters_per_index_record;
ntfs_log_debug("ClustersPerINDXRecord = 0x%x\n", c);
if (c < 0)
vol->indx_record_size = 1 << -c;
else
vol->indx_record_size = c << vol->cluster_size_bits;
vol->indx_record_size_bits = ffs(vol->indx_record_size) - 1;
ntfs_log_debug("INDXRecordSize = 0x%x\n", (unsigned)vol->indx_record_size);
ntfs_log_debug("INDXRecordSizeBits = %u\n", vol->indx_record_size_bits);
/*
* Work out the size of the MFT mirror in number of mft records. If the
* cluster size is less than or equal to the size taken by four mft
* records, the mft mirror stores the first four mft records. If the
* cluster size is bigger than the size taken by four mft records, the
* mft mirror contains as many mft records as will fit into one
* cluster.
*/
if (vol->cluster_size <= 4 * vol->mft_record_size)
vol->mftmirr_size = 4;
else
vol->mftmirr_size = vol->cluster_size / vol->mft_record_size;
return 0;
}

View File

@ -1,42 +0,0 @@
/*
* bootsect.h - Exports for bootsector record handling.
* Originated from the Linux-NTFS project.
*
* Copyright (c) 2000-2002 Anton Altaparmakov
* Copyright (c) 2006 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_BOOTSECT_H
#define _NTFS_BOOTSECT_H
#include "types.h"
#include "volume.h"
#include "layout.h"
/**
* ntfs_boot_sector_is_ntfs - check a boot sector for describing an ntfs volume
* @b: buffer containing the boot sector
*
* This function checks the boot sector in @b for describing a valid ntfs
* volume. Return TRUE if @b is a valid NTFS boot sector or FALSE otherwise.
*/
extern BOOL ntfs_boot_sector_is_ntfs(NTFS_BOOT_SECTOR *b);
extern int ntfs_boot_sector_parse(ntfs_volume *vol, const NTFS_BOOT_SECTOR *bs);
#endif /* defined _NTFS_BOOTSECT_H */

View File

@ -1,609 +0,0 @@
/**
* cache.c : deal with LRU caches
*
* Copyright (c) 2008-2009 Jean-Pierre Andre
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#include "types.h"
#include "security.h"
#include "cache.h"
#include "misc.h"
#include "logging.h"
/*
* General functions to deal with LRU caches
*
* The cached data have to be organized in a structure in which
* the first fields must follow a mandatory pattern and further
* fields may contain any fixed size data. They are stored in an
* LRU list.
*
* A compare function must be provided for finding a wanted entry
* in the cache. Another function may be provided for invalidating
* an entry to facilitate multiple invalidation.
*
* These functions never return error codes. When there is a
* shortage of memory, data is simply not cached.
* When there is a hashing bug, hashing is dropped, and sequential
* searches are used.
*/
/*
* Enter a new hash index, after a new record has been inserted
*
* Do not call when a record has been modified (with no key change)
*/
static void inserthashindex(struct CACHE_HEADER *cache,
struct CACHED_GENERIC *current)
{
int h;
struct HASH_ENTRY *link;
struct HASH_ENTRY *first;
if (cache->dohash) {
h = cache->dohash(current);
if ((h >= 0) && (h < cache->max_hash)) {
/* get a free link and insert at top of hash list */
link = cache->free_hash;
if (link) {
cache->free_hash = link->next;
first = cache->first_hash[h];
if (first)
link->next = first;
else
link->next = NULL;
link->entry = current;
cache->first_hash[h] = link;
} else {
ntfs_log_error("No more hash entries,"
" cache %s hashing dropped\n",
cache->name);
cache->dohash = (cache_hash)NULL;
}
} else {
ntfs_log_error("Illegal hash value,"
" cache %s hashing dropped\n",
cache->name);
cache->dohash = (cache_hash)NULL;
}
}
}
/*
* Drop a hash index when a record is about to be deleted
*/
static void drophashindex(struct CACHE_HEADER *cache,
const struct CACHED_GENERIC *current, int hash)
{
struct HASH_ENTRY *link;
struct HASH_ENTRY *previous;
if (cache->dohash) {
if ((hash >= 0) && (hash < cache->max_hash)) {
/* find the link and unlink */
link = cache->first_hash[hash];
previous = (struct HASH_ENTRY*)NULL;
while (link && (link->entry != current)) {
previous = link;
link = link->next;
}
if (link) {
if (previous)
previous->next = link->next;
else
cache->first_hash[hash] = link->next;
link->next = cache->free_hash;
cache->free_hash = link;
} else {
ntfs_log_error("Bad hash list,"
" cache %s hashing dropped\n",
cache->name);
cache->dohash = (cache_hash)NULL;
}
} else {
ntfs_log_error("Illegal hash value,"
" cache %s hashing dropped\n",
cache->name);
cache->dohash = (cache_hash)NULL;
}
}
}
/*
* Fetch an entry from cache
*
* returns the cache entry, or NULL if not available
* The returned entry may be modified, but not freed
*/
struct CACHED_GENERIC *ntfs_fetch_cache(struct CACHE_HEADER *cache,
const struct CACHED_GENERIC *wanted, cache_compare compare)
{
struct CACHED_GENERIC *current;
struct CACHED_GENERIC *previous;
struct HASH_ENTRY *link;
int h;
current = (struct CACHED_GENERIC*)NULL;
if (cache) {
if (cache->dohash) {
/*
* When possible, use the hash table to
* locate the entry if present
*/
h = cache->dohash(wanted);
link = cache->first_hash[h];
while (link && compare(link->entry, wanted))
link = link->next;
if (link)
current = link->entry;
}
if (!cache->dohash) {
/*
* Search sequentially in LRU list if no hash table
* or if hashing has just failed
*/
current = cache->most_recent_entry;
while (current
&& compare(current, wanted)) {
current = current->next;
}
}
if (current) {
previous = current->previous;
cache->hits++;
if (previous) {
/*
* found and not at head of list, unlink from current
* position and relink as head of list
*/
previous->next = current->next;
if (current->next)
current->next->previous
= current->previous;
else
cache->oldest_entry
= current->previous;
current->next = cache->most_recent_entry;
current->previous
= (struct CACHED_GENERIC*)NULL;
cache->most_recent_entry->previous = current;
cache->most_recent_entry = current;
}
}
cache->reads++;
}
return (current);
}
/*
* Enter an inode number into cache
* returns the cache entry or NULL if not possible
*/
struct CACHED_GENERIC *ntfs_enter_cache(struct CACHE_HEADER *cache,
const struct CACHED_GENERIC *item,
cache_compare compare)
{
struct CACHED_GENERIC *current;
struct CACHED_GENERIC *before;
struct HASH_ENTRY *link;
int h;
current = (struct CACHED_GENERIC*)NULL;
if (cache) {
if (cache->dohash) {
/*
* When possible, use the hash table to
* find out whether the entry if present
*/
h = cache->dohash(item);
link = cache->first_hash[h];
while (link && compare(link->entry, item))
link = link->next;
if (link) {
current = link->entry;
}
}
if (!cache->dohash) {
/*
* Search sequentially in LRU list to locate the end,
* and find out whether the entry is already in list
* As we normally go to the end, no statistics is
* kept.
*/
current = cache->most_recent_entry;
while (current
&& compare(current, item)) {
current = current->next;
}
}
if (!current) {
/*
* Not in list, get a free entry or reuse the
* last entry, and relink as head of list
* Note : we assume at least three entries, so
* before, previous and first are different when
* an entry is reused.
*/
if (cache->free_entry) {
current = cache->free_entry;
cache->free_entry = cache->free_entry->next;
if (item->varsize) {
current->variable = ntfs_malloc(
item->varsize);
} else
current->variable = (void*)NULL;
current->varsize = item->varsize;
if (!cache->oldest_entry)
cache->oldest_entry = current;
} else {
/* reusing the oldest entry */
current = cache->oldest_entry;
before = current->previous;
before->next = (struct CACHED_GENERIC*)NULL;
if (cache->dohash)
drophashindex(cache,current,
cache->dohash(current));
if (cache->dofree)
cache->dofree(current);
cache->oldest_entry = current->previous;
if (item->varsize) {
if (current->varsize)
current->variable = realloc(
current->variable,
item->varsize);
else
current->variable = ntfs_malloc(
item->varsize);
} else {
if (current->varsize)
free(current->variable);
current->variable = (void*)NULL;
}
current->varsize = item->varsize;
}
current->next = cache->most_recent_entry;
current->previous = (struct CACHED_GENERIC*)NULL;
if (cache->most_recent_entry)
cache->most_recent_entry->previous = current;
cache->most_recent_entry = current;
memcpy(current->fixed, item->fixed, cache->fixed_size);
if (item->varsize) {
if (current->variable) {
memcpy(current->variable,
item->variable, item->varsize);
} else {
/*
* no more memory for variable part
* recycle entry in free list
* not an error, just uncacheable
*/
cache->most_recent_entry = current->next;
current->next = cache->free_entry;
cache->free_entry = current;
current = (struct CACHED_GENERIC*)NULL;
}
} else {
current->variable = (void*)NULL;
current->varsize = 0;
}
if (cache->dohash && current)
inserthashindex(cache,current);
}
cache->writes++;
}
return (current);
}
/*
* Invalidate a cache entry
* The entry is moved to the free entry list
* A specific function may be called for entry deletion
*/
static void do_invalidate(struct CACHE_HEADER *cache,
struct CACHED_GENERIC *current, int flags)
{
struct CACHED_GENERIC *previous;
previous = current->previous;
if ((flags & CACHE_FREE) && cache->dofree)
cache->dofree(current);
/*
* Relink into free list
*/
if (current->next)
current->next->previous = current->previous;
else
cache->oldest_entry = current->previous;
if (previous)
previous->next = current->next;
else
cache->most_recent_entry = current->next;
current->next = cache->free_entry;
cache->free_entry = current;
if (current->variable)
free(current->variable);
current->varsize = 0;
}
/*
* Invalidate entries in cache
*
* Several entries may have to be invalidated (at least for inodes
* associated to directories which have been renamed), a different
* compare function may be provided to select entries to invalidate
*
* Returns the number of deleted entries, this can be used by
* the caller to signal a cache corruption if the entry was
* supposed to be found.
*/
int ntfs_invalidate_cache(struct CACHE_HEADER *cache,
const struct CACHED_GENERIC *item, cache_compare compare,
int flags)
{
struct CACHED_GENERIC *current;
struct CACHED_GENERIC *previous;
struct CACHED_GENERIC *next;
struct HASH_ENTRY *link;
int count;
int h;
current = (struct CACHED_GENERIC*)NULL;
count = 0;
if (cache) {
if (!(flags & CACHE_NOHASH) && cache->dohash) {
/*
* When possible, use the hash table to
* find out whether the entry if present
*/
h = cache->dohash(item);
link = cache->first_hash[h];
while (link) {
if (compare(link->entry, item))
link = link->next;
else {
current = link->entry;
link = link->next;
if (current) {
drophashindex(cache,current,h);
do_invalidate(cache,
current,flags);
count++;
}
}
}
}
if ((flags & CACHE_NOHASH) || !cache->dohash) {
/*
* Search sequentially in LRU list
*/
current = cache->most_recent_entry;
previous = (struct CACHED_GENERIC*)NULL;
while (current) {
if (!compare(current, item)) {
next = current->next;
if (cache->dohash)
drophashindex(cache,current,
cache->dohash(current));
do_invalidate(cache,current,flags);
current = next;
count++;
} else {
previous = current;
current = current->next;
}
}
}
}
return (count);
}
int ntfs_remove_cache(struct CACHE_HEADER *cache,
struct CACHED_GENERIC *item, int flags)
{
int count;
count = 0;
if (cache) {
if (cache->dohash)
drophashindex(cache,item,cache->dohash(item));
do_invalidate(cache,item,flags);
count++;
}
return (count);
}
/*
* Free memory allocated to a cache
*/
static void ntfs_free_cache(struct CACHE_HEADER *cache)
{
struct CACHED_GENERIC *entry;
if (cache) {
for (entry=cache->most_recent_entry; entry; entry=entry->next) {
if (cache->dofree)
cache->dofree(entry);
if (entry->variable)
free(entry->variable);
}
free(cache);
}
}
/*
* Create a cache
*
* Returns the cache header, or NULL if the cache could not be created
*/
static struct CACHE_HEADER *ntfs_create_cache(const char *name,
cache_free dofree, cache_hash dohash,
int full_item_size,
int item_count, int max_hash)
{
struct CACHE_HEADER *cache;
struct CACHED_GENERIC *pc;
struct CACHED_GENERIC *qc;
struct HASH_ENTRY *ph;
struct HASH_ENTRY *qh;
struct HASH_ENTRY **px;
size_t size;
int i;
size = sizeof(struct CACHE_HEADER) + item_count*full_item_size;
if (max_hash)
size += item_count*sizeof(struct HASH_ENTRY)
+ max_hash*sizeof(struct HASH_ENTRY*);
cache = (struct CACHE_HEADER*)ntfs_malloc(size);
if (cache) {
/* header */
cache->name = name;
cache->dofree = dofree;
if (dohash && max_hash) {
cache->dohash = dohash;
cache->max_hash = max_hash;
} else {
cache->dohash = (cache_hash)NULL;
cache->max_hash = 0;
}
cache->fixed_size = full_item_size - sizeof(struct CACHED_GENERIC);
cache->reads = 0;
cache->writes = 0;
cache->hits = 0;
/* chain the data entries, and mark an invalid entry */
cache->most_recent_entry = (struct CACHED_GENERIC*)NULL;
cache->oldest_entry = (struct CACHED_GENERIC*)NULL;
cache->free_entry = &cache->entry[0];
pc = &cache->entry[0];
for (i=0; i<(item_count - 1); i++) {
qc = (struct CACHED_GENERIC*)((char*)pc
+ full_item_size);
pc->next = qc;
pc->variable = (void*)NULL;
pc->varsize = 0;
pc = qc;
}
/* special for the last entry */
pc->next = (struct CACHED_GENERIC*)NULL;
pc->variable = (void*)NULL;
pc->varsize = 0;
if (max_hash) {
/* chain the hash entries */
ph = (struct HASH_ENTRY*)(((char*)pc) + full_item_size);
cache->free_hash = ph;
for (i=0; i<(item_count - 1); i++) {
qh = &ph[1];
ph->next = qh;
ph = qh;
}
/* special for the last entry */
if (item_count) {
ph->next = (struct HASH_ENTRY*)NULL;
}
/* create and initialize the hash indexes */
px = (struct HASH_ENTRY**)&ph[1];
cache->first_hash = px;
for (i=0; i<max_hash; i++)
px[i] = (struct HASH_ENTRY*)NULL;
} else {
cache->free_hash = (struct HASH_ENTRY*)NULL;
cache->first_hash = (struct HASH_ENTRY**)NULL;
}
}
return (cache);
}
/*
* Create all LRU caches
*
* No error return, if creation is not possible, cacheing will
* just be not available
*/
void ntfs_create_lru_caches(ntfs_volume *vol)
{
#if CACHE_INODE_SIZE
/* inode cache */
vol->xinode_cache = ntfs_create_cache("inode",(cache_free)NULL,
ntfs_dir_inode_hash, sizeof(struct CACHED_INODE),
CACHE_INODE_SIZE, 2*CACHE_INODE_SIZE);
#endif
#if CACHE_NIDATA_SIZE
/* idata cache */
vol->nidata_cache = ntfs_create_cache("nidata",
ntfs_inode_nidata_free, ntfs_inode_nidata_hash,
sizeof(struct CACHED_NIDATA),
CACHE_NIDATA_SIZE, 2*CACHE_NIDATA_SIZE);
#endif
#if CACHE_LOOKUP_SIZE
/* lookup cache */
vol->lookup_cache = ntfs_create_cache("lookup",
(cache_free)NULL, ntfs_dir_lookup_hash,
sizeof(struct CACHED_LOOKUP),
CACHE_LOOKUP_SIZE, 2*CACHE_LOOKUP_SIZE);
#endif
vol->securid_cache = ntfs_create_cache("securid",(cache_free)NULL,
(cache_hash)NULL,sizeof(struct CACHED_SECURID), CACHE_SECURID_SIZE, 0);
#if CACHE_LEGACY_SIZE
vol->legacy_cache = ntfs_create_cache("legacy",(cache_free)NULL,
(cache_hash)NULL, sizeof(struct CACHED_PERMISSIONS_LEGACY), CACHE_LEGACY_SIZE, 0);
#endif
}
/*
* Free all LRU caches
*/
void ntfs_free_lru_caches(ntfs_volume *vol)
{
#if CACHE_INODE_SIZE
ntfs_free_cache(vol->xinode_cache);
#endif
#if CACHE_NIDATA_SIZE
ntfs_free_cache(vol->nidata_cache);
#endif
#if CACHE_LOOKUP_SIZE
ntfs_free_cache(vol->lookup_cache);
#endif
ntfs_free_cache(vol->securid_cache);
#if CACHE_LEGACY_SIZE
ntfs_free_cache(vol->legacy_cache);
#endif
}

View File

@ -1,119 +0,0 @@
/*
* cache.h : deal with indexed LRU caches
*
* Copyright (c) 2008-2009 Jean-Pierre Andre
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_CACHE_H_
#define _NTFS_CACHE_H_
#include "volume.h"
struct CACHED_GENERIC {
struct CACHED_GENERIC *next;
struct CACHED_GENERIC *previous;
void *variable;
size_t varsize;
union {
/* force alignment for pointers and u64 */
u64 u64align;
void *ptralign;
} fixed[0];
} ;
struct CACHED_INODE {
struct CACHED_INODE *next;
struct CACHED_INODE *previous;
const char *pathname;
size_t varsize;
/* above fields must match "struct CACHED_GENERIC" */
u64 inum;
} ;
struct CACHED_NIDATA {
struct CACHED_NIDATA *next;
struct CACHED_NIDATA *previous;
const char *pathname; /* not used */
size_t varsize; /* not used */
/* above fields must match "struct CACHED_GENERIC" */
u64 inum;
ntfs_inode *ni;
} ;
struct CACHED_LOOKUP {
struct CACHED_LOOKUP *next;
struct CACHED_LOOKUP *previous;
const char *name;
size_t namesize;
/* above fields must match "struct CACHED_GENERIC" */
u64 parent;
u64 inum;
} ;
enum {
CACHE_FREE = 1,
CACHE_NOHASH = 2
} ;
typedef int (*cache_compare)(const struct CACHED_GENERIC *cached,
const struct CACHED_GENERIC *item);
typedef void (*cache_free)(const struct CACHED_GENERIC *cached);
typedef int (*cache_hash)(const struct CACHED_GENERIC *cached);
struct HASH_ENTRY {
struct HASH_ENTRY *next;
struct CACHED_GENERIC *entry;
} ;
struct CACHE_HEADER {
const char *name;
struct CACHED_GENERIC *most_recent_entry;
struct CACHED_GENERIC *oldest_entry;
struct CACHED_GENERIC *free_entry;
struct HASH_ENTRY *free_hash;
struct HASH_ENTRY **first_hash;
cache_free dofree;
cache_hash dohash;
unsigned long reads;
unsigned long writes;
unsigned long hits;
int fixed_size;
int max_hash;
struct CACHED_GENERIC entry[0];
} ;
/* cast to generic, avoiding gcc warnings */
#define GENERIC(pstr) ((const struct CACHED_GENERIC*)(const void*)(pstr))
struct CACHED_GENERIC *ntfs_fetch_cache(struct CACHE_HEADER *cache,
const struct CACHED_GENERIC *wanted,
cache_compare compare);
struct CACHED_GENERIC *ntfs_enter_cache(struct CACHE_HEADER *cache,
const struct CACHED_GENERIC *item,
cache_compare compare);
int ntfs_invalidate_cache(struct CACHE_HEADER *cache,
const struct CACHED_GENERIC *item,
cache_compare compare, int flags);
int ntfs_remove_cache(struct CACHE_HEADER *cache,
struct CACHED_GENERIC *item, int flags);
void ntfs_create_lru_caches(ntfs_volume *vol);
void ntfs_free_lru_caches(ntfs_volume *vol);
#endif /* _NTFS_CACHE_H_ */

View File

@ -1,374 +0,0 @@
/*
cache.c
The cache is not visible to the user. It should be flushed
when any file is closed or changes are made to the filesystem.
This cache implements a least-used-page replacement policy. This will
distribute sectors evenly over the pages, so if less than the maximum
pages are used at once, they should all eventually remain in the cache.
This also has the benefit of throwing out old sectors, so as not to keep
too many stale pages around.
Copyright (c) 2006 Michael "Chishm" Chisholm
Copyright (c) 2009 shareese, rodries
Copyright (c) 2010 Dimok
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <ogc/lwp_watchdog.h>
#include <string.h>
#include <limits.h>
#include "cache2.h"
#include "bit_ops.h"
#include "mem_allocate.h"
#define CACHE_FREE UINT_MAX
NTFS_CACHE* _NTFS_cache_constructor (unsigned int numberOfPages, unsigned int sectorsPerPage, const DISC_INTERFACE* discInterface, sec_t endOfPartition, sec_t sectorSize) {
NTFS_CACHE* cache;
unsigned int i;
NTFS_CACHE_ENTRY* cacheEntries;
if(numberOfPages==0 || sectorsPerPage==0) return NULL;
if (numberOfPages < 4) {
numberOfPages = 4;
}
if (sectorsPerPage < 32) {
sectorsPerPage = 32;
}
cache = (NTFS_CACHE*) ntfs_alloc (sizeof(NTFS_CACHE));
if (cache == NULL) {
return NULL;
}
cache->disc = discInterface;
cache->endOfPartition = endOfPartition;
cache->numberOfPages = numberOfPages;
cache->sectorsPerPage = sectorsPerPage;
cache->sectorSize = sectorSize;
cacheEntries = (NTFS_CACHE_ENTRY*) ntfs_alloc ( sizeof(NTFS_CACHE_ENTRY) * numberOfPages);
if (cacheEntries == NULL) {
ntfs_free (cache);
return NULL;
}
for (i = 0; i < numberOfPages; i++) {
cacheEntries[i].sector = CACHE_FREE;
cacheEntries[i].count = 0;
cacheEntries[i].last_access = 0;
cacheEntries[i].dirty = false;
cacheEntries[i].cache = (uint8_t*) ntfs_align ( sectorsPerPage * cache->sectorSize );
}
cache->cacheEntries = cacheEntries;
return cache;
}
void _NTFS_cache_destructor (NTFS_CACHE* cache) {
unsigned int i;
if(cache==NULL) return;
// Clear out cache before destroying it
_NTFS_cache_flush(cache);
// Free memory in reverse allocation order
for (i = 0; i < cache->numberOfPages; i++) {
ntfs_free (cache->cacheEntries[i].cache);
}
ntfs_free (cache->cacheEntries);
ntfs_free (cache);
}
static u32 accessCounter = 0;
static u32 accessTime(){
accessCounter++;
return accessCounter;
}
static NTFS_CACHE_ENTRY* _NTFS_cache_getPage(NTFS_CACHE *cache,sec_t sector)
{
unsigned int i;
NTFS_CACHE_ENTRY* cacheEntries = cache->cacheEntries;
unsigned int numberOfPages = cache->numberOfPages;
unsigned int sectorsPerPage = cache->sectorsPerPage;
bool foundFree = false;
unsigned int oldUsed = 0;
unsigned int oldAccess = UINT_MAX;
for(i=0;i<numberOfPages;i++) {
if(sector>=cacheEntries[i].sector && sector<(cacheEntries[i].sector + cacheEntries[i].count)) {
cacheEntries[i].last_access = accessTime();
return &(cacheEntries[i]);
}
if(foundFree==false && (cacheEntries[i].sector==CACHE_FREE || cacheEntries[i].last_access<oldAccess)) {
if(cacheEntries[i].sector==CACHE_FREE) foundFree = true;
oldUsed = i;
oldAccess = cacheEntries[i].last_access;
}
}
if(foundFree==false && cacheEntries[oldUsed].dirty==true) {
if(!cache->disc->writeSectors(cacheEntries[oldUsed].sector,cacheEntries[oldUsed].count,cacheEntries[oldUsed].cache)) return NULL;
cacheEntries[oldUsed].dirty = false;
}
sector = (sector/sectorsPerPage)*sectorsPerPage; // align base sector to page size
sec_t next_page = sector + sectorsPerPage;
if(next_page > cache->endOfPartition) next_page = cache->endOfPartition;
if(!cache->disc->readSectors(sector,next_page-sector,cacheEntries[oldUsed].cache)) return NULL;
cacheEntries[oldUsed].sector = sector;
cacheEntries[oldUsed].count = next_page-sector;
cacheEntries[oldUsed].last_access = accessTime();
return &(cacheEntries[oldUsed]);
}
static NTFS_CACHE_ENTRY* _NTFS_cache_findPage(NTFS_CACHE *cache, sec_t sector, sec_t count) {
unsigned int i;
NTFS_CACHE_ENTRY* cacheEntries = cache->cacheEntries;
unsigned int numberOfPages = cache->numberOfPages;
NTFS_CACHE_ENTRY *entry = NULL;
sec_t lowest = UINT_MAX;
for(i=0;i<numberOfPages;i++) {
if (cacheEntries[i].sector != CACHE_FREE) {
bool intersect;
if (sector > cacheEntries[i].sector) {
intersect = sector - cacheEntries[i].sector < cacheEntries[i].count;
} else {
intersect = cacheEntries[i].sector - sector < count;
}
if ( intersect && (cacheEntries[i].sector < lowest)) {
lowest = cacheEntries[i].sector;
entry = &cacheEntries[i];
}
}
}
return entry;
}
bool _NTFS_cache_readSectors(NTFS_CACHE *cache,sec_t sector,sec_t numSectors,void *buffer)
{
sec_t sec;
sec_t secs_to_read;
NTFS_CACHE_ENTRY *entry;
uint8_t *dest = buffer;
while(numSectors>0) {
entry = _NTFS_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
secs_to_read = entry->count - sec;
if(secs_to_read>numSectors) secs_to_read = numSectors;
memcpy(dest,entry->cache + (sec*cache->sectorSize),(secs_to_read*cache->sectorSize));
dest += (secs_to_read*cache->sectorSize);
sector += secs_to_read;
numSectors -= secs_to_read;
}
return true;
}
/*
Reads some data from a cache page, determined by the sector number
*/
bool _NTFS_cache_readPartialSector (NTFS_CACHE* cache, void* buffer, sec_t sector, unsigned int offset, size_t size)
{
sec_t sec;
NTFS_CACHE_ENTRY *entry;
if (offset + size > cache->sectorSize) return false;
entry = _NTFS_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
memcpy(buffer,entry->cache + ((sec*cache->sectorSize) + offset),size);
return true;
}
bool _NTFS_cache_readLittleEndianValue (NTFS_CACHE* cache, uint32_t *value, sec_t sector, unsigned int offset, int num_bytes) {
uint8_t buf[4];
if (!_NTFS_cache_readPartialSector(cache, buf, sector, offset, num_bytes)) return false;
switch(num_bytes) {
case 1: *value = buf[0]; break;
case 2: *value = u8array_to_u16(buf,0); break;
case 4: *value = u8array_to_u32(buf,0); break;
default: return false;
}
return true;
}
/*
Writes some data to a cache page, making sure it is loaded into memory first.
*/
bool _NTFS_cache_writePartialSector (NTFS_CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size)
{
sec_t sec;
NTFS_CACHE_ENTRY *entry;
if (offset + size > cache->sectorSize) return false;
entry = _NTFS_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
memcpy(entry->cache + ((sec*cache->sectorSize) + offset),buffer,size);
entry->dirty = true;
return true;
}
bool _NTFS_cache_writeLittleEndianValue (NTFS_CACHE* cache, const uint32_t value, sec_t sector, unsigned int offset, int size) {
uint8_t buf[4] = {0, 0, 0, 0};
switch(size) {
case 1: buf[0] = value; break;
case 2: u16_to_u8array(buf, 0, value); break;
case 4: u32_to_u8array(buf, 0, value); break;
default: return false;
}
return _NTFS_cache_writePartialSector(cache, buf, sector, offset, size);
}
/*
Writes some data to a cache page, zeroing out the page first
*/
bool _NTFS_cache_eraseWritePartialSector (NTFS_CACHE* cache, const void* buffer, sec_t sector, unsigned int offset, size_t size)
{
sec_t sec;
NTFS_CACHE_ENTRY *entry;
if (offset + size > cache->sectorSize) return false;
entry = _NTFS_cache_getPage(cache,sector);
if(entry==NULL) return false;
sec = sector - entry->sector;
memset(entry->cache + (sec*cache->sectorSize),0,cache->sectorSize);
memcpy(entry->cache + ((sec*cache->sectorSize) + offset),buffer,size);
entry->dirty = true;
return true;
}
bool _NTFS_cache_writeSectors (NTFS_CACHE* cache, sec_t sector, sec_t numSectors, const void* buffer)
{
sec_t sec;
sec_t secs_to_write;
NTFS_CACHE_ENTRY* entry;
const uint8_t *src = buffer;
while(numSectors>0)
{
entry = _NTFS_cache_findPage(cache,sector,numSectors);
if(entry!=NULL) {
if ( entry->sector > sector) {
secs_to_write = entry->sector - sector;
cache->disc->writeSectors(sector,secs_to_write,src);
src += (secs_to_write*cache->sectorSize);
sector += secs_to_write;
numSectors -= secs_to_write;
}
sec = sector - entry->sector;
secs_to_write = entry->count - sec;
if(secs_to_write>numSectors) secs_to_write = numSectors;
memcpy(entry->cache + (sec*cache->sectorSize),src,(secs_to_write*cache->sectorSize));
src += (secs_to_write*cache->sectorSize);
sector += secs_to_write;
numSectors -= secs_to_write;
entry->dirty = true;
} else {
cache->disc->writeSectors(sector,numSectors,src);
numSectors=0;
}
}
return true;
}
/*
Flushes all dirty pages to disc, clearing the dirty flag.
*/
bool _NTFS_cache_flush (NTFS_CACHE* cache) {
unsigned int i;
if(cache==NULL) return true;
for (i = 0; i < cache->numberOfPages; i++) {
if (cache->cacheEntries[i].dirty) {
if (!cache->disc->writeSectors (cache->cacheEntries[i].sector, cache->cacheEntries[i].count, cache->cacheEntries[i].cache)) {
return false;
}
}
cache->cacheEntries[i].dirty = false;
}
return true;
}
void _NTFS_cache_invalidate (NTFS_CACHE* cache) {
unsigned int i;
if(cache==NULL)
return;
_NTFS_cache_flush(cache);
for (i = 0; i < cache->numberOfPages; i++) {
cache->cacheEntries[i].sector = CACHE_FREE;
cache->cacheEntries[i].last_access = 0;
cache->cacheEntries[i].count = 0;
cache->cacheEntries[i].dirty = false;
}
}

View File

@ -1,135 +0,0 @@
/*
NTFS_CACHE.h
The NTFS_CACHE is not visible to the user. It should be flushed
when any file is closed or changes are made to the filesystem.
This NTFS_CACHE implements a least-used-page replacement policy. This will
distribute sectors evenly over the pages, so if less than the maximum
pages are used at once, they should all eventually remain in the NTFS_CACHE.
This also has the benefit of throwing out old sectors, so as not to keep
too many stale pages around.
Copyright (c) 2006 Michael "Chishm" Chisholm
Copyright (c) 2009 shareese, rodries
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _CACHE2_H
#define _CACHE2_H
//#include "common.h"
//#include "disc.h"
#include <stddef.h>
#include <stdint.h>
#include <gctypes.h>
#include <ogc/disc_io.h>
#include <gccore.h>
typedef struct {
sec_t sector;
unsigned int count;
u64 last_access;
bool dirty;
u8* cache;
} NTFS_CACHE_ENTRY;
typedef struct {
const DISC_INTERFACE* disc;
sec_t endOfPartition;
unsigned int numberOfPages;
unsigned int sectorsPerPage;
sec_t sectorSize;
NTFS_CACHE_ENTRY* cacheEntries;
} NTFS_CACHE;
/*
Read data from a sector in the NTFS_CACHE
If the sector is not in the NTFS_CACHE, it will be swapped in
offset is the position to start reading from
size is the amount of data to read
Precondition: offset + size <= BYTES_PER_READ
*/
//bool _NTFS_cache_readPartialSector (NTFS_CACHE* NTFS_CACHE, void* buffer, sec_t sector, unsigned int offset, size_t size);
//bool _NTFS_cache_readLittleEndianValue (NTFS_CACHE* NTFS_CACHE, uint32_t *value, sec_t sector, unsigned int offset, int num_bytes);
/*
Write data to a sector in the NTFS_CACHE
If the sector is not in the NTFS_CACHE, it will be swapped in.
When the sector is swapped out, the data will be written to the disc
offset is the position to start writing to
size is the amount of data to write
Precondition: offset + size <= BYTES_PER_READ
*/
//bool _NTFS_cache_writePartialSector (NTFS_CACHE* NTFS_CACHE, const void* buffer, sec_t sector, unsigned int offset, size_t size);
//bool _NTFS_cache_writeLittleEndianValue (NTFS_CACHE* NTFS_CACHE, const uint32_t value, sec_t sector, unsigned int offset, int num_bytes);
/*
Write data to a sector in the NTFS_CACHE, zeroing the sector first
If the sector is not in the NTFS_CACHE, it will be swapped in.
When the sector is swapped out, the data will be written to the disc
offset is the position to start writing to
size is the amount of data to write
Precondition: offset + size <= BYTES_PER_READ
*/
//bool _NTFS_cache_eraseWritePartialSector (NTFS_CACHE* NTFS_CACHE, const void* buffer, sec_t sector, unsigned int offset, size_t size);
/*
Read several sectors from the NTFS_CACHE
*/
bool _NTFS_cache_readSectors (NTFS_CACHE* NTFS_CACHE, sec_t sector, sec_t numSectors, void* buffer);
/*
Read a full sector from the NTFS_CACHE
*/
//static inline bool _NTFS_cache_readSector (NTFS_CACHE* NTFS_CACHE, void* buffer, sec_t sector) {
// return _NTFS_cache_readPartialSector (NTFS_CACHE, buffer, sector, 0, BYTES_PER_READ);
//}
/*
Write a full sector to the NTFS_CACHE
*/
//static inline bool _NTFS_cache_writeSector (NTFS_CACHE* NTFS_CACHE, const void* buffer, sec_t sector) {
// return _NTFS_cache_writePartialSector (NTFS_CACHE, buffer, sector, 0, BYTES_PER_READ);
//}
bool _NTFS_cache_writeSectors (NTFS_CACHE* NTFS_CACHE, sec_t sector, sec_t numSectors, const void* buffer);
/*
Write any dirty sectors back to disc and clear out the contents of the NTFS_CACHE
*/
bool _NTFS_cache_flush (NTFS_CACHE* NTFS_CACHE);
/*
Clear out the contents of the NTFS_CACHE without writing any dirty sectors first
*/
void _NTFS_cache_invalidate (NTFS_CACHE* NTFS_CACHE);
NTFS_CACHE* _NTFS_cache_constructor (unsigned int numberOfPages, unsigned int sectorsPerPage, const DISC_INTERFACE* discInterface, sec_t endOfPartition, sec_t sectorSize);
void _NTFS_cache_destructor (NTFS_CACHE* NTFS_CACHE);
#endif // _CACHE_H

View File

@ -1,271 +0,0 @@
/**
* collate.c - NTFS collation handling. Originated from the Linux-NTFS project.
*
* Copyright (c) 2004 Anton Altaparmakov
* Copyright (c) 2005 Yura Pakhuchiy
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include "attrib.h"
#include "index.h"
#include "collate.h"
#include "debug.h"
#include "unistr.h"
#include "logging.h"
/**
* ntfs_collate_binary - Which of two binary objects should be listed first
* @vol: unused
* @data1:
* @data1_len:
* @data2:
* @data2_len:
*
* Description...
*
* Returns:
*/
static int ntfs_collate_binary(ntfs_volume *vol __attribute__((unused)),
const void *data1, const int data1_len,
const void *data2, const int data2_len)
{
int rc;
ntfs_log_trace("Entering.\n");
rc = memcmp(data1, data2, min(data1_len, data2_len));
if (!rc && (data1_len != data2_len)) {
if (data1_len < data2_len)
rc = -1;
else
rc = 1;
}
ntfs_log_trace("Done, returning %i.\n", rc);
return rc;
}
/**
* ntfs_collate_ntofs_ulong - Which of two long ints should be listed first
* @vol: unused
* @data1:
* @data1_len:
* @data2:
* @data2_len:
*
* Description...
*
* Returns:
*/
static int ntfs_collate_ntofs_ulong(ntfs_volume *vol __attribute__((unused)),
const void *data1, const int data1_len,
const void *data2, const int data2_len)
{
int rc;
u32 d1, d2;
ntfs_log_trace("Entering.\n");
if (data1_len != data2_len || data1_len != 4) {
ntfs_log_error("data1_len or/and data2_len not equal to 4.\n");
return NTFS_COLLATION_ERROR;
}
d1 = le32_to_cpup(data1);
d2 = le32_to_cpup(data2);
if (d1 < d2)
rc = -1;
else {
if (d1 == d2)
rc = 0;
else
rc = 1;
}
ntfs_log_trace("Done, returning %i.\n", rc);
return rc;
}
/**
* ntfs_collate_ntofs_ulongs - Which of two le32 arrays should be listed first
*
* Returns: -1, 0 or 1 depending of how the arrays compare
*/
static int ntfs_collate_ntofs_ulongs(ntfs_volume *vol __attribute__((unused)),
const void *data1, const int data1_len,
const void *data2, const int data2_len)
{
int rc;
int len;
const le32 *p1, *p2;
u32 d1, d2;
ntfs_log_trace("Entering.\n");
if ((data1_len != data2_len) || (data1_len <= 0) || (data1_len & 3)) {
ntfs_log_error("data1_len or data2_len not valid\n");
return NTFS_COLLATION_ERROR;
}
p1 = (const le32*)data1;
p2 = (const le32*)data2;
len = data1_len;
do {
d1 = le32_to_cpup(p1);
p1++;
d2 = le32_to_cpup(p2);
p2++;
} while ((d1 == d2) && ((len -= 4) > 0));
if (d1 < d2)
rc = -1;
else {
if (d1 == d2)
rc = 0;
else
rc = 1;
}
ntfs_log_trace("Done, returning %i.\n", rc);
return rc;
}
/**
* ntfs_collate_ntofs_security_hash - Which of two security descriptors
* should be listed first
* @vol: unused
* @data1:
* @data1_len:
* @data2:
* @data2_len:
*
* JPA compare two security hash keys made of two unsigned le32
*
* Returns: -1, 0 or 1 depending of how the keys compare
*/
static int ntfs_collate_ntofs_security_hash(ntfs_volume *vol __attribute__((unused)),
const void *data1, const int data1_len,
const void *data2, const int data2_len)
{
int rc;
u32 d1, d2;
const le32 *p1, *p2;
ntfs_log_trace("Entering.\n");
if (data1_len != data2_len || data1_len != 8) {
ntfs_log_error("data1_len or/and data2_len not equal to 8.\n");
return NTFS_COLLATION_ERROR;
}
p1 = (const le32*)data1;
p2 = (const le32*)data2;
d1 = le32_to_cpup(p1);
d2 = le32_to_cpup(p2);
if (d1 < d2)
rc = -1;
else {
if (d1 > d2)
rc = 1;
else {
p1++;
p2++;
d1 = le32_to_cpup(p1);
d2 = le32_to_cpup(p2);
if (d1 < d2)
rc = -1;
else {
if (d1 > d2)
rc = 1;
else
rc = 0;
}
}
}
ntfs_log_trace("Done, returning %i.\n", rc);
return rc;
}
/**
* ntfs_collate_file_name - Which of two filenames should be listed first
* @vol:
* @data1:
* @data1_len: unused
* @data2:
* @data2_len: unused
*
* Description...
*
* Returns:
*/
static int ntfs_collate_file_name(ntfs_volume *vol,
const void *data1, const int data1_len __attribute__((unused)),
const void *data2, const int data2_len __attribute__((unused)))
{
const FILE_NAME_ATTR *file_name_attr1;
const FILE_NAME_ATTR *file_name_attr2;
int rc;
ntfs_log_trace("Entering.\n");
file_name_attr1 = (const FILE_NAME_ATTR*)data1;
file_name_attr2 = (const FILE_NAME_ATTR*)data2;
rc = ntfs_names_full_collate(
(ntfschar*)&file_name_attr1->file_name,
file_name_attr1->file_name_length,
(ntfschar*)&file_name_attr2->file_name,
file_name_attr2->file_name_length,
CASE_SENSITIVE, vol->upcase, vol->upcase_len);
ntfs_log_trace("Done, returning %i.\n", rc);
return rc;
}
/*
* Get a pointer to appropriate collation function.
*
* Returns NULL if the needed function is not implemented
*/
COLLATE ntfs_get_collate_function(COLLATION_RULES cr)
{
COLLATE collate;
switch (cr) {
case COLLATION_BINARY :
collate = ntfs_collate_binary;
break;
case COLLATION_FILE_NAME :
collate = ntfs_collate_file_name;
break;
case COLLATION_NTOFS_SECURITY_HASH :
collate = ntfs_collate_ntofs_security_hash;
break;
case COLLATION_NTOFS_ULONG :
collate = ntfs_collate_ntofs_ulong;
break;
case COLLATION_NTOFS_ULONGS :
collate = ntfs_collate_ntofs_ulongs;
break;
default :
errno = EOPNOTSUPP;
collate = (COLLATE)NULL;
break;
}
return (collate);
}

View File

@ -1,34 +0,0 @@
/*
* collate.h - Defines for NTFS collation handling. Originated from the Linux-NTFS
* project.
*
* Copyright (c) 2004 Anton Altaparmakov
* Copyright (c) 2005 Yura Pakhuchiy
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_COLLATE_H
#define _NTFS_COLLATE_H
#include "types.h"
#include "volume.h"
#define NTFS_COLLATION_ERROR -2
extern COLLATE ntfs_get_collate_function(COLLATION_RULES);
#endif /* _NTFS_COLLATE_H */

View File

@ -1,250 +0,0 @@
/**
* compat.c - Tweaks for Windows compatibility
*
* Copyright (c) 2002 Richard Russon
* Copyright (c) 2002-2004 Anton Altaparmakov
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "compat.h"
#ifndef HAVE_FFS
/**
* ffs - Find the first set bit in an int
* @x:
*
* Description...
*
* Returns:
*/
int ffs(int x)
{
int r = 1;
if (!x)
return 0;
if (!(x & 0xffff)) {
x >>= 16;
r += 16;
}
if (!(x & 0xff)) {
x >>= 8;
r += 8;
}
if (!(x & 0xf)) {
x >>= 4;
r += 4;
}
if (!(x & 3)) {
x >>= 2;
r += 2;
}
if (!(x & 1)) {
x >>= 1;
r += 1;
}
return r;
}
#endif /* HAVE_FFS */
#ifndef HAVE_DAEMON
/* ************************************************************
* From: src.opensolaris.org
* src/lib/libresolv2/common/bsd/daemon.c
*/
/*
* Copyright (c) 1997-2000 by Sun Microsystems, Inc.
* All rights reserved.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "@(#)daemon.c 8.1 (Berkeley) 6/4/93";
static const char rcsid[] = "$Id: compat.c,v 1.1.1.1.2.1 2008-08-16 15:17:44 jpandre Exp $";
#endif /* LIBC_SCCS and not lint */
/*
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
int daemon(int nochdir, int noclose) {
int fd;
switch (fork()) {
case -1:
return (-1);
case 0:
break;
default:
_exit(0);
}
if (setsid() == -1)
return (-1);
if (!nochdir)
(void)chdir("/");
if (!noclose && (fd = open("/dev/null", O_RDWR, 0)) != -1) {
(void)dup2(fd, 0);
(void)dup2(fd, 1);
(void)dup2(fd, 2);
if (fd > 2)
(void)close (fd);
}
return (0);
}
/*
* End: src/lib/libresolv2/common/bsd/daemon.c
*************************************************************/
#endif /* HAVE_DAEMON */
#ifndef HAVE_STRSEP
/* ************************************************************
* From: src.opensolaris.org
* src/lib/libresolv2/common/bsd/strsep.c
*/
/*
* Copyright (c) 1997, by Sun Microsystems, Inc.
* All rights reserved.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static const char sccsid[] = "strsep.c 8.1 (Berkeley) 6/4/93";
static const char rcsid[] = "$Id: compat.c,v 1.1.1.1.2.1 2008-08-16 15:17:44 jpandre Exp $";
#endif /* LIBC_SCCS and not lint */
/*
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
/*
* Get next token from string *stringp, where tokens are possibly-empty
* strings separated by characters from delim.
*
* Writes NULs into the string at *stringp to end tokens.
* delim need not remain constant from call to call.
* On return, *stringp points past the last NUL written (if there might
* be further tokens), or is NULL (if there are definitely no more tokens).
*
* If *stringp is NULL, strsep returns NULL.
*/
char *strsep(char **stringp, const char *delim) {
char *s;
const char *spanp;
int c, sc;
char *tok;
if ((s = *stringp) == NULL)
return (NULL);
for (tok = s;;) {
c = *s++;
spanp = delim;
do {
if ((sc = *spanp++) == c) {
if (c == 0)
s = NULL;
else
s[-1] = 0;
*stringp = s;
return (tok);
}
} while (sc != 0);
}
/* NOTREACHED */
}
/*
* End: src/lib/libresolv2/common/bsd/strsep.c
*************************************************************/
#endif /* HAVE_STRSEP */

View File

@ -1,86 +0,0 @@
/*
* compat.h - Tweaks for Windows compatibility.
*
* Copyright (c) 2002 Richard Russon
* Copyright (c) 2002-2004 Anton Altaparmakov
* Copyright (c) 2008-2009 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_COMPAT_H
#define _NTFS_COMPAT_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
#ifndef HAVE_FFS
extern int ffs(int i);
#endif /* HAVE_FFS */
#ifndef HAVE_DAEMON
extern int daemon(int nochdir, int noclose);
#endif /* HAVE_DAEMON */
#ifndef HAVE_STRSEP
extern char *strsep(char **stringp, const char *delim);
#endif /* HAVE_STRSEP */
#ifdef WINDOWS
#define HAVE_STDIO_H /* mimic config.h */
#define HAVE_STDARG_H
#define atoll _atoi64
#define fdatasync commit
#define __inline__ inline
#define __attribute__(X) /*nothing*/
#else /* !defined WINDOWS */
#ifndef O_BINARY
#define O_BINARY 0 /* unix is binary by default */
#endif
#ifdef GEKKO
#include "mem_allocate.h"
#define XATTR_CREATE 1
#define XATTR_REPLACE 2
#define MINORBITS 20
#define MINORMASK ((1U << MINORBITS) - 1)
#define major(dev) ((unsigned int) ((dev) >> MINORBITS))
#define minor(dev) ((unsigned int) ((dev) & MINORMASK))
#define mkdev(ma,mi) (((ma) << MINORBITS) | (mi))
#define random rand
#endif /* defined GEKKO */
#endif /* defined WINDOWS */
#endif /* defined _NTFS_COMPAT_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,41 +0,0 @@
/*
* compress.h - Exports for compressed attribute handling.
* Originated from the Linux-NTFS project.
*
* Copyright (c) 2004 Anton Altaparmakov
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_COMPRESS_H
#define _NTFS_COMPRESS_H
#include "types.h"
#include "attrib.h"
extern s64 ntfs_compressed_attr_pread(ntfs_attr *na, s64 pos, s64 count,
void *b);
extern s64 ntfs_compressed_pwrite(ntfs_attr *na, runlist_element *brl, s64 wpos,
s64 offs, s64 to_write, s64 rounded,
const void *b, int compressed_part,
VCN *update_from);
extern int ntfs_compressed_close(ntfs_attr *na, runlist_element *brl,
s64 offs, VCN *update_from);
#endif /* defined _NTFS_COMPRESS_H */

View File

@ -1,375 +0,0 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define to 1 if debug should be enabled */
#undef ENABLE_DEBUG
/* Define to 1 if the nfconv patch should be enabled */
#undef ENABLE_NFCONV
/* Define to 1 if using internal fuse */
#undef FUSE_INTERNAL
/* Define to 1 if you have the `atexit' function. */
#define HAVE_ATEXIT 1
/* Define to 1 if you have the `basename' function. */
#undef HAVE_BASENAME
/* Define to 1 if you have the <byteswap.h> header file. */
#undef HAVE_BYTESWAP_H
/* Define to 1 if you have the `clock_gettime' function. */
#undef HAVE_CLOCK_GETTIME
/* Define to 1 if you have the <ctype.h> header file. */
#define HAVE_CTYPE_H 1
/* Define to 1 if you have the `daemon' function. */
#undef HAVE_DAEMON
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
#undef HAVE_DOPRNT
/* Define to 1 if you have the `dup2' function. */
#undef HAVE_DUP2
/* Define to 1 if you have the <endian.h> header file. */
#undef HAVE_ENDIAN_H
/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the `fdatasync' function. */
#undef HAVE_FDATASYNC
/* Define to 1 if you have the <features.h> header file. */
#undef HAVE_FEATURES_H
/* Define to 1 if you have the `ffs' function. */
#define HAVE_FFS 1
/* Define to 1 if you have the `fork' function. */
#define HAVE_FORK 1
/* Define to 1 if you have the `getmntent' function. */
#undef HAVE_GETMNTENT
/* Define to 1 if you have the <getopt.h> header file. */
#define HAVE_GETOPT_H 1
/* Define to 1 if you have the `getopt_long' function. */
#define HAVE_GETOPT_LONG 1
/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY
/* Define to 1 if you have the `hasmntopt' function. */
#undef HAVE_HASMNTOPT
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the <libgen.h> header file. */
#define HAVE_LIBGEN_H 1
/* Define to 1 if you have the <libintl.h> header file. */
#undef HAVE_LIBINTL_H
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if you have the <linux/fd.h> header file. */
#undef HAVE_LINUX_FD_H
/* Define to 1 if you have the <linux/hdreg.h> header file. */
#undef HAVE_LINUX_HDREG_H
/* Define to 1 if you have the <linux/major.h> header file. */
#undef HAVE_LINUX_MAJOR_H
/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1
/* Define to 1 if you have the <machine/endian.h> header file. */
#define HAVE_MACHINE_ENDIAN_H 1
/* Define to 1 if you have the <math.h> header file. */
#define HAVE_MATH_H 1
/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
#define HAVE_MBRTOWC 1
/* Define to 1 if you have the `mbsinit' function. */
#define HAVE_MBSINIT 1
/* Define to 1 if you have the `memmove' function. */
#define HAVE_MEMMOVE 1
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1
/* Define to 1 if you have the <mntent.h> header file. */
#undef HAVE_MNTENT_H
/* Define to 1 if you have the `realpath' function. */
#undef HAVE_REALPATH
/* Define to 1 if you have the `regcomp' function. */
#undef HAVE_REGCOMP
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
/* Define to 1 if you have the `setxattr' function. */
#undef HAVE_SETXATTR
/* Define to 1 if `stat' has the bug that it succeeds when given the
zero-length file name argument. */
#define HAVE_STAT_EMPTY_STRING_BUG 1
/* Define to 1 if you have the <stdarg.h> header file. */
#define HAVE_STDARG_H 1
/* Define to 1 if stdbool.h conforms to C99. */
#define HAVE_STDBOOL_H 1
/* Define to 1 if you have the <stddef.h> header file. */
#define HAVE_STDDEF_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdio.h> header file. */
#define HAVE_STDIO_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strcasecmp' function. */
#define HAVE_STRCASECMP 1
/* Define to 1 if you have the `strchr' function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
/* Define to 1 if you have the `strftime' function. */
#define HAVE_STRFTIME 1
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strnlen' function. */
#define HAVE_STRNLEN 1
/* Define to 1 if you have the `strsep' function. */
#define HAVE_STRSEP 1
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
/* Define to 1 if you have the `strtoul' function. */
#define HAVE_STRTOUL 1
/* Define to 1 if `st_atim' is member of `struct stat'. */
#undef HAVE_STRUCT_STAT_ST_ATIM
/* Define to 1 if `st_atimespec' is member of `struct stat'. */
#undef HAVE_STRUCT_STAT_ST_ATIMESPEC
/* Define to 1 if `st_blocks' is member of `struct stat'. */
#define HAVE_STRUCT_STAT_ST_BLOCKS 1
/* Define to 1 if `st_rdev' is member of `struct stat'. */
#define HAVE_STRUCT_STAT_ST_RDEV 1
/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
`HAVE_STRUCT_STAT_ST_BLOCKS' instead. */
#undef HAVE_ST_BLOCKS
/* Define to 1 if you have the `sysconf' function. */
#define HAVE_SYSCONF 1
/* Define to 1 if you have the <syslog.h> header file. */
#undef HAVE_SYSLOG_H
/* Define to 1 if you have the <sys/byteorder.h> header file. */
#undef HAVE_SYS_BYTEORDER_H
/* Define to 1 if you have the <sys/endian.h> header file. */
#undef HAVE_SYS_ENDIAN_H
/* Define to 1 if you have the <sys/ioctl.h> header file. */
#undef HAVE_SYS_IOCTL_H
/* Define to 1 if you have the <sys/mkdev.h> header file. */
#undef HAVE_SYS_MKDEV_H
/* Define to 1 if you have the <sys/mount.h> header file. */
#undef HAVE_SYS_MOUNT_H
/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/statvfs.h> header file. */
#define HAVE_SYS_STATVFS_H 1
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/sysmacros.h> header file. */
#undef HAVE_SYS_SYSMACROS_H
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/vfs.h> header file. */
#undef HAVE_SYS_VFS_H
/* Define to 1 if you have the <time.h> header file. */
#define HAVE_TIME_H 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `utime' function. */
#undef HAVE_UTIME
/* Define to 1 if you have the `utimensat' function. */
#undef HAVE_UTIMENSAT
/* Define to 1 if you have the <utime.h> header file. */
#define HAVE_UTIME_H 1
/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */
#undef HAVE_UTIME_NULL
/* Define to 1 if you have the `vprintf' function. */
#define HAVE_VPRINTF 1
/* Define to 1 if you have the <wchar.h> header file. */
#define HAVE_WCHAR_H 1
/* Define to 1 if you have the <windows.h> header file. */
#undef HAVE_WINDOWS_H
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
/* Don't update /etc/mtab */
#undef IGNORE_MTAB
/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
slash. */
#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/"
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* Don't use default IO ops */
#undef NO_NTFS_DEVICE_DEFAULT_IO_OPS
/* Name of package */
#define PACKAGE "ntfs-3g"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "ntfs-3g-devel@lists.sf.net"
/* Define to the full name of this package. */
#define PACKAGE_NAME "ntfs-3g"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "ntfs-3g 2010.8.8"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "ntfs-3g"
/* Define to the version of this package. */
#define PACKAGE_VERSION "2010.8.8"
/* POSIX ACL support */
#undef POSIXACLS
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# define __EXTENSIONS__ 1
#endif
/* Version number of package */
#define VERSION "2010.8.8"
/* Define to 1 if this is a Windows OS */
#undef WINDOWS
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#define WORDS_BIGENDIAN 1
/* Define to 1 if your processor stores words with the least significant byte
first (like Intel and VAX, unlike Motorola and SPARC). */
#undef WORDS_LITTLEENDIAN
/* Number of bits in a file offset, on hosts where this is settable. */
#define _FILE_OFFSET_BITS 64
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
/* Define for large files, on AIX-style hosts. */
#define _LARGE_FILES 1
/* Required define if using POSIX threads */
#undef _REENTRANT
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
#define inline __inline__
#endif
/* Define to `long int' if <sys/types.h> does not define. */
#undef off_t
/* Define to `unsigned int' if <sys/types.h> does not define. */
#undef size_t

View File

@ -1,79 +0,0 @@
/**
* debug.c - Debugging output functions. Originated from the Linux-NTFS project.
*
* Copyright (c) 2002-2004 Anton Altaparmakov
* Copyright (c) 2004-2006 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include "types.h"
#include "runlist.h"
#include "debug.h"
#include "logging.h"
#ifdef DEBUG
/**
* ntfs_debug_runlist_dump - Dump a runlist.
* @rl:
*
* Description...
*
* Returns:
*/
void ntfs_debug_runlist_dump(const runlist_element *rl)
{
int i = 0;
const char *lcn_str[5] = { "LCN_HOLE ", "LCN_RL_NOT_MAPPED",
"LCN_ENOENT ", "LCN_EINVAL ",
"LCN_unknown " };
ntfs_log_debug("NTFS-fs DEBUG: Dumping runlist (values in hex):\n");
if (!rl) {
ntfs_log_debug("Run list not present.\n");
return;
}
ntfs_log_debug("VCN LCN Run length\n");
do {
LCN lcn = (rl + i)->lcn;
if (lcn < (LCN)0) {
int idx = -lcn - 1;
if (idx > -LCN_EINVAL - 1)
idx = 4;
ntfs_log_debug("%-16lld %s %-16lld%s\n",
(long long)rl[i].vcn, lcn_str[idx],
(long long)rl[i].length,
rl[i].length ? "" : " (runlist end)");
} else
ntfs_log_debug("%-16lld %-16lld %-16lld%s\n",
(long long)rl[i].vcn, (long long)rl[i].lcn,
(long long)rl[i].length,
rl[i].length ? "" : " (runlist end)");
} while (rl[i++].length);
}
#endif

View File

@ -1,47 +0,0 @@
/*
* debug.h - Debugging output functions. Originated from the Linux-NTFS project.
*
* Copyright (c) 2002-2004 Anton Altaparmakov
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_DEBUG_H
#define _NTFS_DEBUG_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "logging.h"
struct _runlist_element;
#ifdef DEBUG
extern void ntfs_debug_runlist_dump(const struct _runlist_element *rl);
#else
static __inline__ void ntfs_debug_runlist_dump(const struct _runlist_element *rl __attribute__((unused))) {}
#endif
#define NTFS_BUG(msg) \
{ \
int ___i; \
ntfs_log_critical("Bug in %s(): %s\n", __FUNCTION__, msg); \
ntfs_log_debug("Forcing segmentation fault!"); \
___i = ((int*)NULL)[1]; \
}
#endif /* defined _NTFS_DEBUG_H */

View File

@ -1,730 +0,0 @@
/**
* device.c - Low level device io functions. Originated from the Linux-NTFS project.
*
* Copyright (c) 2004-2006 Anton Altaparmakov
* Copyright (c) 2004-2006 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#ifdef HAVE_SYS_IOCTL_H
#include <sys/ioctl.h>
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#ifdef HAVE_SYS_MOUNT_H
#include <sys/mount.h>
#endif
#ifdef HAVE_LINUX_FD_H
#include <linux/fd.h>
#endif
#ifdef HAVE_LINUX_HDREG_H
#include <linux/hdreg.h>
#endif
#include "types.h"
#include "mst.h"
#include "debug.h"
#include "device.h"
#include "logging.h"
#include "misc.h"
#if defined(linux) && defined(_IO) && !defined(BLKGETSIZE)
#define BLKGETSIZE _IO(0x12,96) /* Get device size in 512-byte blocks. */
#endif
#if defined(linux) && defined(_IOR) && !defined(BLKGETSIZE64)
#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* Get device size in bytes. */
#endif
#if defined(linux) && !defined(HDIO_GETGEO)
#define HDIO_GETGEO 0x0301 /* Get device geometry. */
#endif
#if defined(linux) && defined(_IO) && !defined(BLKSSZGET)
# define BLKSSZGET _IO(0x12,104) /* Get device sector size in bytes. */
#endif
#if defined(linux) && defined(_IO) && !defined(BLKBSZSET)
# define BLKBSZSET _IOW(0x12,113,size_t) /* Set device block size in bytes. */
#endif
/**
* ntfs_device_alloc - allocate an ntfs device structure and pre-initialize it
* @name: name of the device (must be present)
* @state: initial device state (usually zero)
* @dops: ntfs device operations to use with the device (must be present)
* @priv_data: pointer to private data (optional)
*
* Allocate an ntfs device structure and pre-initialize it with the user-
* specified device operations @dops, device state @state, device name @name,
* and optional private data @priv_data.
*
* Note, @name is copied and can hence be freed after this functions returns.
*
* On success return a pointer to the allocated ntfs device structure and on
* error return NULL with errno set to the error code returned by ntfs_malloc().
*/
struct ntfs_device *ntfs_device_alloc(const char *name, const long state,
struct ntfs_device_operations *dops, void *priv_data)
{
struct ntfs_device *dev;
if (!name) {
errno = EINVAL;
return NULL;
}
dev = ntfs_malloc(sizeof(struct ntfs_device));
if (dev) {
if (!(dev->d_name = strdup(name))) {
int eo = errno;
free(dev);
errno = eo;
return NULL;
}
dev->d_ops = dops;
dev->d_state = state;
dev->d_private = priv_data;
}
return dev;
}
/**
* ntfs_device_free - free an ntfs device structure
* @dev: ntfs device structure to free
*
* Free the ntfs device structure @dev.
*
* Return 0 on success or -1 on error with errno set to the error code. The
* following error codes are defined:
* EINVAL Invalid pointer @dev.
* EBUSY Device is still open. Close it before freeing it!
*/
int ntfs_device_free(struct ntfs_device *dev)
{
if (!dev) {
errno = EINVAL;
return -1;
}
if (NDevOpen(dev)) {
errno = EBUSY;
return -1;
}
free(dev->d_name);
free(dev);
return 0;
}
/**
* ntfs_pread - positioned read from disk
* @dev: device to read from
* @pos: position in device to read from
* @count: number of bytes to read
* @b: output data buffer
*
* This function will read @count bytes from device @dev at position @pos into
* the data buffer @b.
*
* On success, return the number of successfully read bytes. If this number is
* lower than @count this means that we have either reached end of file or
* encountered an error during the read so that the read is partial. 0 means
* end of file or nothing to read (@count is 0).
*
* On error and nothing has been read, return -1 with errno set appropriately
* to the return code of either seek, read, or set to EINVAL in case of
* invalid arguments.
*/
s64 ntfs_pread(struct ntfs_device *dev, const s64 pos, s64 count, void *b)
{
s64 br, total;
struct ntfs_device_operations *dops;
ntfs_log_trace("pos %lld, count %lld\n",(long long)pos,(long long)count);
if (!b || count < 0 || pos < 0) {
errno = EINVAL;
return -1;
}
if (!count)
return 0;
dops = dev->d_ops;
for (total = 0; count; count -= br, total += br) {
br = dops->pread(dev, (char*)b + total, count, pos + total);
/* If everything ok, continue. */
if (br > 0)
continue;
/* If EOF or error return number of bytes read. */
if (!br || total)
return total;
/* Nothing read and error, return error status. */
return br;
}
/* Finally, return the number of bytes read. */
return total;
}
/**
* ntfs_pwrite - positioned write to disk
* @dev: device to write to
* @pos: position in file descriptor to write to
* @count: number of bytes to write
* @b: data buffer to write to disk
*
* This function will write @count bytes from data buffer @b to the device @dev
* at position @pos.
*
* On success, return the number of successfully written bytes. If this number
* is lower than @count this means that the write has been interrupted in
* flight or that an error was encountered during the write so that the write
* is partial. 0 means nothing was written (also return 0 when @count is 0).
*
* On error and nothing has been written, return -1 with errno set
* appropriately to the return code of either seek, write, or set
* to EINVAL in case of invalid arguments.
*/
s64 ntfs_pwrite(struct ntfs_device *dev, const s64 pos, s64 count,
const void *b)
{
s64 written, total, ret = -1;
struct ntfs_device_operations *dops;
ntfs_log_trace("pos %lld, count %lld\n",(long long)pos,(long long)count);
if (!b || count < 0 || pos < 0) {
errno = EINVAL;
goto out;
}
if (!count)
return 0;
if (NDevReadOnly(dev)) {
errno = EROFS;
goto out;
}
dops = dev->d_ops;
NDevSetDirty(dev);
for (total = 0; count; count -= written, total += written) {
written = dops->pwrite(dev, (const char*)b + total, count,
pos + total);
/* If everything ok, continue. */
if (written > 0)
continue;
/*
* If nothing written or error return number of bytes written.
*/
if (!written || total)
break;
/* Nothing written and error, return error status. */
total = written;
break;
}
ret = total;
out:
return ret;
}
/**
* ntfs_mst_pread - multi sector transfer (mst) positioned read
* @dev: device to read from
* @pos: position in file descriptor to read from
* @count: number of blocks to read
* @bksize: size of each block that needs mst deprotecting
* @b: output data buffer
*
* Multi sector transfer (mst) positioned read. This function will read @count
* blocks of size @bksize bytes each from device @dev at position @pos into the
* the data buffer @b.
*
* On success, return the number of successfully read blocks. If this number is
* lower than @count this means that we have reached end of file, that the read
* was interrupted, or that an error was encountered during the read so that
* the read is partial. 0 means end of file or nothing was read (also return 0
* when @count or @bksize are 0).
*
* On error and nothing was read, return -1 with errno set appropriately to the
* return code of either seek, read, or set to EINVAL in case of invalid
* arguments.
*
* NOTE: If an incomplete multi sector transfer has been detected the magic
* will have been changed to magic_BAAD but no error will be returned. Thus it
* is possible that we return count blocks as being read but that any number
* (between zero and count!) of these blocks is actually subject to a multi
* sector transfer error. This should be detected by the caller by checking for
* the magic being "BAAD".
*/
s64 ntfs_mst_pread(struct ntfs_device *dev, const s64 pos, s64 count,
const u32 bksize, void *b)
{
s64 br, i;
if (bksize & (bksize - 1) || bksize % NTFS_BLOCK_SIZE) {
errno = EINVAL;
return -1;
}
/* Do the read. */
br = ntfs_pread(dev, pos, count * bksize, b);
if (br < 0)
return br;
/*
* Apply fixups to successfully read data, disregarding any errors
* returned from the MST fixup function. This is because we want to
* fixup everything possible and we rely on the fact that the "BAAD"
* magic will be detected later on.
*/
count = br / bksize;
for (i = 0; i < count; ++i)
ntfs_mst_post_read_fixup((NTFS_RECORD*)
((u8*)b + i * bksize), bksize);
/* Finally, return the number of complete blocks read. */
return count;
}
/**
* ntfs_mst_pwrite - multi sector transfer (mst) positioned write
* @dev: device to write to
* @pos: position in file descriptor to write to
* @count: number of blocks to write
* @bksize: size of each block that needs mst protecting
* @b: data buffer to write to disk
*
* Multi sector transfer (mst) positioned write. This function will write
* @count blocks of size @bksize bytes each from data buffer @b to the device
* @dev at position @pos.
*
* On success, return the number of successfully written blocks. If this number
* is lower than @count this means that the write has been interrupted or that
* an error was encountered during the write so that the write is partial. 0
* means nothing was written (also return 0 when @count or @bksize are 0).
*
* On error and nothing has been written, return -1 with errno set
* appropriately to the return code of either seek, write, or set
* to EINVAL in case of invalid arguments.
*
* NOTE: We mst protect the data, write it, then mst deprotect it using a quick
* deprotect algorithm (no checking). This saves us from making a copy before
* the write and at the same time causes the usn to be incremented in the
* buffer. This conceptually fits in better with the idea that cached data is
* always deprotected and protection is performed when the data is actually
* going to hit the disk and the cache is immediately deprotected again
* simulating an mst read on the written data. This way cache coherency is
* achieved.
*/
s64 ntfs_mst_pwrite(struct ntfs_device *dev, const s64 pos, s64 count,
const u32 bksize, void *b)
{
s64 written, i;
if (count < 0 || bksize % NTFS_BLOCK_SIZE) {
errno = EINVAL;
return -1;
}
if (!count)
return 0;
/* Prepare data for writing. */
for (i = 0; i < count; ++i) {
int err;
err = ntfs_mst_pre_write_fixup((NTFS_RECORD*)
((u8*)b + i * bksize), bksize);
if (err < 0) {
/* Abort write at this position. */
if (!i)
return err;
count = i;
break;
}
}
/* Write the prepared data. */
written = ntfs_pwrite(dev, pos, count * bksize, b);
/* Quickly deprotect the data again. */
for (i = 0; i < count; ++i)
ntfs_mst_post_write_fixup((NTFS_RECORD*)((u8*)b + i * bksize));
if (written <= 0)
return written;
/* Finally, return the number of complete blocks written. */
return written / bksize;
}
/**
* ntfs_cluster_read - read ntfs clusters
* @vol: volume to read from
* @lcn: starting logical cluster number
* @count: number of clusters to read
* @b: output data buffer
*
* Read @count ntfs clusters starting at logical cluster number @lcn from
* volume @vol into buffer @b. Return number of clusters read or -1 on error,
* with errno set to the error code.
*/
s64 ntfs_cluster_read(const ntfs_volume *vol, const s64 lcn, const s64 count,
void *b)
{
s64 br;
if (!vol || lcn < 0 || count < 0) {
errno = EINVAL;
return -1;
}
if (vol->nr_clusters < lcn + count) {
errno = ESPIPE;
ntfs_log_perror("Trying to read outside of volume "
"(%lld < %lld)", (long long)vol->nr_clusters,
(long long)lcn + count);
return -1;
}
br = ntfs_pread(vol->dev, lcn << vol->cluster_size_bits,
count << vol->cluster_size_bits, b);
if (br < 0) {
ntfs_log_perror("Error reading cluster(s)");
return br;
}
return br >> vol->cluster_size_bits;
}
/**
* ntfs_cluster_write - write ntfs clusters
* @vol: volume to write to
* @lcn: starting logical cluster number
* @count: number of clusters to write
* @b: data buffer to write to disk
*
* Write @count ntfs clusters starting at logical cluster number @lcn from
* buffer @b to volume @vol. Return the number of clusters written or -1 on
* error, with errno set to the error code.
*/
s64 ntfs_cluster_write(const ntfs_volume *vol, const s64 lcn,
const s64 count, const void *b)
{
s64 bw;
if (!vol || lcn < 0 || count < 0) {
errno = EINVAL;
return -1;
}
if (vol->nr_clusters < lcn + count) {
errno = ESPIPE;
ntfs_log_perror("Trying to write outside of volume "
"(%lld < %lld)", (long long)vol->nr_clusters,
(long long)lcn + count);
return -1;
}
if (!NVolReadOnly(vol))
bw = ntfs_pwrite(vol->dev, lcn << vol->cluster_size_bits,
count << vol->cluster_size_bits, b);
else
bw = count << vol->cluster_size_bits;
if (bw < 0) {
ntfs_log_perror("Error writing cluster(s)");
return bw;
}
return bw >> vol->cluster_size_bits;
}
/**
* ntfs_device_offset_valid - test if a device offset is valid
* @dev: open device
* @ofs: offset to test for validity
*
* Test if the offset @ofs is an existing location on the device described
* by the open device structure @dev.
*
* Return 0 if it is valid and -1 if it is not valid.
*/
static int ntfs_device_offset_valid(struct ntfs_device *dev, s64 ofs)
{
char ch;
if (dev->d_ops->seek(dev, ofs, SEEK_SET) >= 0 &&
dev->d_ops->read(dev, &ch, 1) == 1)
return 0;
return -1;
}
/**
* ntfs_device_size_get - return the size of a device in blocks
* @dev: open device
* @block_size: block size in bytes in which to return the result
*
* Return the number of @block_size sized blocks in the device described by the
* open device @dev.
*
* Adapted from e2fsutils-1.19, Copyright (C) 1995 Theodore Ts'o.
*
* On error return -1 with errno set to the error code.
*/
s64 ntfs_device_size_get(struct ntfs_device *dev, int block_size)
{
s64 high, low;
if (!dev || block_size <= 0 || (block_size - 1) & block_size) {
errno = EINVAL;
return -1;
}
#ifdef BLKGETSIZE64
{ u64 size;
if (dev->d_ops->ioctl(dev, BLKGETSIZE64, &size) >= 0) {
ntfs_log_debug("BLKGETSIZE64 nr bytes = %llu (0x%llx)\n",
(unsigned long long)size,
(unsigned long long)size);
return (s64)size / block_size;
}
}
#endif
#ifdef BLKGETSIZE
{ unsigned long size;
if (dev->d_ops->ioctl(dev, BLKGETSIZE, &size) >= 0) {
ntfs_log_debug("BLKGETSIZE nr 512 byte blocks = %lu (0x%lx)\n",
size, size);
return (s64)size * 512 / block_size;
}
}
#endif
#ifdef FDGETPRM
{ struct floppy_struct this_floppy;
if (dev->d_ops->ioctl(dev, FDGETPRM, &this_floppy) >= 0) {
ntfs_log_debug("FDGETPRM nr 512 byte blocks = %lu (0x%lx)\n",
(unsigned long)this_floppy.size,
(unsigned long)this_floppy.size);
return (s64)this_floppy.size * 512 / block_size;
}
}
#endif
/*
* We couldn't figure it out by using a specialized ioctl,
* so do binary search to find the size of the device.
*/
low = 0LL;
for (high = 1024LL; !ntfs_device_offset_valid(dev, high); high <<= 1)
low = high;
while (low < high - 1LL) {
const s64 mid = (low + high) / 2;
if (!ntfs_device_offset_valid(dev, mid))
low = mid;
else
high = mid;
}
dev->d_ops->seek(dev, 0LL, SEEK_SET);
return (low + 1LL) / block_size;
}
/**
* ntfs_device_partition_start_sector_get - get starting sector of a partition
* @dev: open device
*
* On success, return the starting sector of the partition @dev in the parent
* block device of @dev. On error return -1 with errno set to the error code.
*
* The following error codes are defined:
* EINVAL Input parameter error
* EOPNOTSUPP System does not support HDIO_GETGEO ioctl
* ENOTTY @dev is a file or a device not supporting HDIO_GETGEO
*/
s64 ntfs_device_partition_start_sector_get(struct ntfs_device *dev)
{
if (!dev) {
errno = EINVAL;
return -1;
}
#ifdef HDIO_GETGEO
{ struct hd_geometry geo;
if (!dev->d_ops->ioctl(dev, HDIO_GETGEO, &geo)) {
ntfs_log_debug("HDIO_GETGEO start_sect = %lu (0x%lx)\n",
geo.start, geo.start);
return geo.start;
}
}
#else
errno = EOPNOTSUPP;
#endif
return -1;
}
/**
* ntfs_device_heads_get - get number of heads of device
* @dev: open device
*
* On success, return the number of heads on the device @dev. On error return
* -1 with errno set to the error code.
*
* The following error codes are defined:
* EINVAL Input parameter error
* EOPNOTSUPP System does not support HDIO_GETGEO ioctl
* ENOTTY @dev is a file or a device not supporting HDIO_GETGEO
*/
int ntfs_device_heads_get(struct ntfs_device *dev)
{
if (!dev) {
errno = EINVAL;
return -1;
}
#ifdef HDIO_GETGEO
{ struct hd_geometry geo;
if (!dev->d_ops->ioctl(dev, HDIO_GETGEO, &geo)) {
ntfs_log_debug("HDIO_GETGEO heads = %u (0x%x)\n",
(unsigned)geo.heads,
(unsigned)geo.heads);
return geo.heads;
}
}
#else
errno = EOPNOTSUPP;
#endif
return -1;
}
/**
* ntfs_device_sectors_per_track_get - get number of sectors per track of device
* @dev: open device
*
* On success, return the number of sectors per track on the device @dev. On
* error return -1 with errno set to the error code.
*
* The following error codes are defined:
* EINVAL Input parameter error
* EOPNOTSUPP System does not support HDIO_GETGEO ioctl
* ENOTTY @dev is a file or a device not supporting HDIO_GETGEO
*/
int ntfs_device_sectors_per_track_get(struct ntfs_device *dev)
{
if (!dev) {
errno = EINVAL;
return -1;
}
#ifdef HDIO_GETGEO
{ struct hd_geometry geo;
if (!dev->d_ops->ioctl(dev, HDIO_GETGEO, &geo)) {
ntfs_log_debug("HDIO_GETGEO sectors_per_track = %u (0x%x)\n",
(unsigned)geo.sectors,
(unsigned)geo.sectors);
return geo.sectors;
}
}
#else
errno = EOPNOTSUPP;
#endif
return -1;
}
/**
* ntfs_device_sector_size_get - get sector size of a device
* @dev: open device
*
* On success, return the sector size in bytes of the device @dev.
* On error return -1 with errno set to the error code.
*
* The following error codes are defined:
* EINVAL Input parameter error
* EOPNOTSUPP System does not support BLKSSZGET ioctl
* ENOTTY @dev is a file or a device not supporting BLKSSZGET
*/
int ntfs_device_sector_size_get(struct ntfs_device *dev)
{
if (!dev) {
errno = EINVAL;
return -1;
}
#ifdef BLKSSZGET
{
int sect_size = 0;
if (!dev->d_ops->ioctl(dev, BLKSSZGET, &sect_size)) {
ntfs_log_debug("BLKSSZGET sector size = %d bytes\n",
sect_size);
return sect_size;
}
}
#else
errno = EOPNOTSUPP;
#endif
return -1;
}
/**
* ntfs_device_block_size_set - set block size of a device
* @dev: open device
* @block_size: block size to set @dev to
*
* On success, return 0.
* On error return -1 with errno set to the error code.
*
* The following error codes are defined:
* EINVAL Input parameter error
* EOPNOTSUPP System does not support BLKBSZSET ioctl
* ENOTTY @dev is a file or a device not supporting BLKBSZSET
*/
int ntfs_device_block_size_set(struct ntfs_device *dev,
int block_size __attribute__((unused)))
{
if (!dev) {
errno = EINVAL;
return -1;
}
#ifdef BLKBSZSET
{
size_t s_block_size = block_size;
if (!dev->d_ops->ioctl(dev, BLKBSZSET, &s_block_size)) {
ntfs_log_debug("Used BLKBSZSET to set block size to "
"%d bytes.\n", block_size);
return 0;
}
/* If not a block device, pretend it was successful. */
if (!NDevBlock(dev))
return 0;
}
#else
/* If not a block device, pretend it was successful. */
if (!NDevBlock(dev))
return 0;
errno = EOPNOTSUPP;
#endif
return -1;
}

View File

@ -1,128 +0,0 @@
/*
* device.h - Exports for low level device io. Originated from the Linux-NTFS project.
*
* Copyright (c) 2000-2006 Anton Altaparmakov
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_DEVICE_H
#define _NTFS_DEVICE_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "device_io.h"
#include "types.h"
#include "support.h"
#include "volume.h"
/**
* enum ntfs_device_state_bits -
*
* Defined bits for the state field in the ntfs_device structure.
*/
typedef enum {
ND_Open, /* 1: Device is open. */
ND_ReadOnly, /* 1: Device is read-only. */
ND_Dirty, /* 1: Device is dirty, needs sync. */
ND_Block, /* 1: Device is a block device. */
} ntfs_device_state_bits;
#define test_ndev_flag(nd, flag) test_bit(ND_##flag, (nd)->d_state)
#define set_ndev_flag(nd, flag) set_bit(ND_##flag, (nd)->d_state)
#define clear_ndev_flag(nd, flag) clear_bit(ND_##flag, (nd)->d_state)
#define NDevOpen(nd) test_ndev_flag(nd, Open)
#define NDevSetOpen(nd) set_ndev_flag(nd, Open)
#define NDevClearOpen(nd) clear_ndev_flag(nd, Open)
#define NDevReadOnly(nd) test_ndev_flag(nd, ReadOnly)
#define NDevSetReadOnly(nd) set_ndev_flag(nd, ReadOnly)
#define NDevClearReadOnly(nd) clear_ndev_flag(nd, ReadOnly)
#define NDevDirty(nd) test_ndev_flag(nd, Dirty)
#define NDevSetDirty(nd) set_ndev_flag(nd, Dirty)
#define NDevClearDirty(nd) clear_ndev_flag(nd, Dirty)
#define NDevBlock(nd) test_ndev_flag(nd, Block)
#define NDevSetBlock(nd) set_ndev_flag(nd, Block)
#define NDevClearBlock(nd) clear_ndev_flag(nd, Block)
/**
* struct ntfs_device -
*
* The ntfs device structure defining all operations needed to access the low
* level device underlying the ntfs volume.
*/
struct ntfs_device {
struct ntfs_device_operations *d_ops; /* Device operations. */
unsigned long d_state; /* State of the device. */
char *d_name; /* Name of device. */
void *d_private; /* Private data used by the
device operations. */
};
struct stat;
/**
* struct ntfs_device_operations -
*
* The ntfs device operations defining all operations that can be performed on
* the low level device described by an ntfs device structure.
*/
struct ntfs_device_operations {
int (*open)(struct ntfs_device *dev, int flags);
int (*close)(struct ntfs_device *dev);
s64 (*seek)(struct ntfs_device *dev, s64 offset, int whence);
s64 (*read)(struct ntfs_device *dev, void *buf, s64 count);
s64 (*write)(struct ntfs_device *dev, const void *buf, s64 count);
s64 (*pread)(struct ntfs_device *dev, void *buf, s64 count, s64 offset);
s64 (*pwrite)(struct ntfs_device *dev, const void *buf, s64 count,
s64 offset);
int (*sync)(struct ntfs_device *dev);
int (*stat)(struct ntfs_device *dev, struct stat *buf);
int (*ioctl)(struct ntfs_device *dev, int request, void *argp);
};
extern struct ntfs_device *ntfs_device_alloc(const char *name, const long state,
struct ntfs_device_operations *dops, void *priv_data);
extern int ntfs_device_free(struct ntfs_device *dev);
extern s64 ntfs_pread(struct ntfs_device *dev, const s64 pos, s64 count,
void *b);
extern s64 ntfs_pwrite(struct ntfs_device *dev, const s64 pos, s64 count,
const void *b);
extern s64 ntfs_mst_pread(struct ntfs_device *dev, const s64 pos, s64 count,
const u32 bksize, void *b);
extern s64 ntfs_mst_pwrite(struct ntfs_device *dev, const s64 pos, s64 count,
const u32 bksize, void *b);
extern s64 ntfs_cluster_read(const ntfs_volume *vol, const s64 lcn,
const s64 count, void *b);
extern s64 ntfs_cluster_write(const ntfs_volume *vol, const s64 lcn,
const s64 count, const void *b);
extern s64 ntfs_device_size_get(struct ntfs_device *dev, int block_size);
extern s64 ntfs_device_partition_start_sector_get(struct ntfs_device *dev);
extern int ntfs_device_heads_get(struct ntfs_device *dev);
extern int ntfs_device_sectors_per_track_get(struct ntfs_device *dev);
extern int ntfs_device_sector_size_get(struct ntfs_device *dev);
extern int ntfs_device_block_size_set(struct ntfs_device *dev, int block_size);
#endif /* defined _NTFS_DEVICE_H */

View File

@ -1,40 +0,0 @@
/*
* device_io.c - Default device io operations. Originated from the Linux-NTFS project.
*
* Copyright (c) 2003 Anton Altaparmakov
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "config.h"
#ifndef GEKKO
#ifndef NO_NTFS_DEVICE_DEFAULT_IO_OPS
#ifndef __CYGWIN32__
/* Not on Cygwin; use standard Unix style low level device operations. */
#include "unix_io.c"
#else /* __CYGWIN32__ */
/* On Cygwin; use Win32 low level device operations. */
#include "win32_io.c"
#endif /* __CYGWIN32__ */
#endif /* NO_NTFS_DEVICE_DEFAULT_IO_OPS */
#endif /* GEKKO */

View File

@ -1,82 +0,0 @@
/*
* device_io.h - Exports for default device io. Originated from the Linux-NTFS project.
*
* Copyright (c) 2000-2006 Anton Altaparmakov
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_DEVICE_IO_H
#define _NTFS_DEVICE_IO_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifndef NO_NTFS_DEVICE_DEFAULT_IO_OPS
#ifndef __CYGWIN32__
#ifndef GEKKO
/* Not on Cygwin; use standard Unix style low level device operations. */
#define ntfs_device_default_io_ops ntfs_device_unix_io_ops
#else
/* Wii i/o device. */
#define ntfs_device_default_io_ops ntfs_device_gekko_io_ops
#endif
#else /* __CYGWIN32__ */
#ifndef HDIO_GETGEO
# define HDIO_GETGEO 0x301
/**
* struct hd_geometry -
*/
struct hd_geometry {
unsigned char heads;
unsigned char sectors;
unsigned short cylinders;
unsigned long start;
};
#endif
#ifndef BLKGETSIZE
# define BLKGETSIZE 0x1260
#endif
#ifndef BLKSSZGET
# define BLKSSZGET 0x1268
#endif
#ifndef BLKGETSIZE64
# define BLKGETSIZE64 0x80041272
#endif
#ifndef BLKBSZSET
# define BLKBSZSET 0x40041271
#endif
/* On Cygwin; use Win32 low level device operations. */
#define ntfs_device_default_io_ops ntfs_device_win32_io_ops
#endif /* __CYGWIN32__ */
/* Forward declaration. */
struct ntfs_device_operations;
extern struct ntfs_device_operations ntfs_device_default_io_ops;
#endif /* NO_NTFS_DEVICE_DEFAULT_IO_OPS */
#endif /* defined _NTFS_DEVICE_IO_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,128 +0,0 @@
/*
* dir.h - Exports for directory handling. Originated from the Linux-NTFS project.
*
* Copyright (c) 2002 Anton Altaparmakov
* Copyright (c) 2005-2006 Yura Pakhuchiy
* Copyright (c) 2004-2005 Richard Russon
* Copyright (c) 2005-2008 Szabolcs Szakacsits
*
* This program/include file 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/include file 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 (in the main directory of the NTFS-3G
* distribution in the file COPYING); if not, write to the Free Software
* Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _NTFS_DIR_H
#define _NTFS_DIR_H
#include "types.h"
#define PATH_SEP '/'
/*
* We do not have these under DJGPP, so define our version that do not conflict
* with other S_IFs defined under DJGPP.
*/
#ifdef DJGPP
#ifndef S_IFLNK
#define S_IFLNK 0120000
#endif
#ifndef S_ISLNK
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#endif
#ifndef S_IFSOCK
#define S_IFSOCK 0140000
#endif
#ifndef S_ISSOCK
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
#endif
#endif
/*
* The little endian Unicode strings $I30, $SII, $SDH, $O, $Q, $R
* as a global constant.
*/
extern ntfschar NTFS_INDEX_I30[5];
extern ntfschar NTFS_INDEX_SII[5];
extern ntfschar NTFS_INDEX_SDH[5];
extern ntfschar NTFS_INDEX_O[3];
extern ntfschar NTFS_INDEX_Q[3];
extern ntfschar NTFS_INDEX_R[3];
extern u64 ntfs_inode_lookup_by_name(ntfs_inode *dir_ni,
const ntfschar *uname, const int uname_len);
extern u64 ntfs_inode_lookup_by_mbsname(ntfs_inode *dir_ni, const char *name);
extern void ntfs_inode_update_mbsname(ntfs_inode *dir_ni, const char *name,
u64 inum);
extern ntfs_inode *ntfs_pathname_to_inode(ntfs_volume *vol, ntfs_inode *parent,
const char *pathname);
extern ntfs_inode *ntfs_create(ntfs_inode *dir_ni, le32 securid,
ntfschar *name, u8 name_len, mode_t type);
extern ntfs_inode *ntfs_create_device(ntfs_inode *dir_ni, le32 securid,
ntfschar *name, u8 name_len, mode_t type, dev_t dev);
extern ntfs_inode *ntfs_create_symlink(ntfs_inode *dir_ni, le32 securid,
ntfschar *name, u8 name_len, ntfschar *target, int target_len);
extern int ntfs_check_empty_dir(ntfs_inode *ni);
extern int ntfs_delete(ntfs_volume *vol, const char *path,
ntfs_inode *ni, ntfs_inode *dir_ni, ntfschar *name,
u8 name_len);
extern int ntfs_link(ntfs_inode *ni, ntfs_inode *dir_ni, ntfschar *name,
u8 name_len);
/*
* File types (adapted from include <linux/fs.h>)
*/
#define NTFS_DT_UNKNOWN 0
#define NTFS_DT_FIFO 1
#define NTFS_DT_CHR 2
#define NTFS_DT_DIR 4
#define NTFS_DT_BLK 6
#define NTFS_DT_REG 8
#define NTFS_DT_LNK 10
#define NTFS_DT_SOCK 12
#define NTFS_DT_WHT 14
/*
* This is the "ntfs_filldir" function type, used by ntfs_readdir() to let
* the caller specify what kind of dirent layout it wants to have.
* This allows the caller to read directories into their application or
* to have different dirent layouts depending on the binary type.
*/
typedef int (*ntfs_filldir_t)(void *dirent, const ntfschar *name,
const int name_len, const int name_type, const s64 pos,
const MFT_REF mref, const unsigned dt_type);
extern int ntfs_readdir(ntfs_inode *dir_ni, s64 *pos,
void *dirent, ntfs_filldir_t filldir);
ntfs_inode *ntfs_dir_parent_inode(ntfs_inode *ni);
int ntfs_get_ntfs_dos_name(ntfs_inode *ni, ntfs_inode *dir_ni,
char *value, size_t size);
int ntfs_set_ntfs_dos_name(ntfs_inode *ni, ntfs_inode *dir_ni,
const char *value, size_t size, int flags);
int ntfs_remove_ntfs_dos_name(ntfs_inode *ni, ntfs_inode *dir_ni);
#if CACHE_INODE_SIZE
struct CACHED_GENERIC;
extern int ntfs_dir_inode_hash(const struct CACHED_GENERIC *cached);
extern int ntfs_dir_lookup_hash(const struct CACHED_GENERIC *cached);
#endif
#endif /* defined _NTFS_DIR_H */

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